溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Android Service中如何實(shí)現(xiàn)彈出對(duì)話(huà)框

發(fā)布時(shí)間:2020-08-04 14:17:10 來(lái)源:億速云 閱讀:376 作者:小豬 欄目:移動(dòng)開(kāi)發(fā)

小編這次要給大家分享的是Android Service中如何實(shí)現(xiàn)彈出對(duì)話(huà)框,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

一、手機(jī)版本問(wèn)題,大多數(shù)文章沒(méi)有涉及這個(gè)點(diǎn),導(dǎo)致他們的代碼并無(wú)法正常使用

M版本以上需要使用的Type--> TYPE_APPLICATION_OVERLAY

AlertDialog.Builder builder=new AlertDialog.Builder(getApplicationContext()); 
builder.setTitle("提示"); 
builder.setMessage("service彈框"); 
builder.setNegativeButton("明白了",null); 
Dialog dialog=builder.create();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){//6.0       
  dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);        
}else {       
  dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);        
} 
dialog.show();

同時(shí),因?yàn)樯婕安煌姹镜腁ndroid系統(tǒng)

AndroidManifest.xml 中聲明同時(shí)需要這兩個(gè)類(lèi)型對(duì)應(yīng)的權(quán)限  

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

二、權(quán)限問(wèn)題,service中彈出的對(duì)話(huà)框?yàn)橄到y(tǒng)彈框,在M版本以上需要申請(qǐng)懸浮窗權(quán)限

Android 6.0 以前懸浮窗是默認(rèn)允許的

注意Android 6.0以后的使用

因?yàn)閼腋〈皺?quán)限 SYSTEM_ALERT_WINDOW 屬于特殊權(quán)限 ,需要自己特別單獨(dú)申請(qǐng)

特殊權(quán)限,顧名思義,就是一些特別敏感的權(quán)限,在Android系統(tǒng)中,主要由兩個(gè)

SYSTEM_ALERT_WINDOW(設(shè)置懸浮窗,進(jìn)行一些黑科技)
WRITE_SETTINGS (修改系統(tǒng)設(shè)置)

關(guān)于上面兩個(gè)特殊權(quán)限的授權(quán),做法是使用startActivityForResult啟動(dòng)授權(quán)界面來(lái)完成。

申請(qǐng)方式:

private static final int REQUEST_CODE = 1;
private void requestAlertWindowPermission() {
  Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
  intent.setData(Uri.parse("package:" + getPackageName()));
  startActivityForResult(intent, REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == REQUEST_CODE) {
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
     if (Settings.canDrawOverlays(this)) {
        Log.i("xqxinfo", "onActivityResult granted");
     }
   } 
  } 
}

看完這篇關(guān)于Android Service中如何實(shí)現(xiàn)彈出對(duì)話(huà)框的文章,如果覺(jué)得文章內(nèi)容寫(xiě)得不錯(cuò)的話(huà),可以把它分享出去給更多人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI