91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android 8.1.0 Service中如何彈出Dialog

發布時間:2021-08-07 11:43:08 來源:億速云 閱讀:186 作者:小新 欄目:移動開發

小編給大家分享一下Android 8.1.0 Service中如何彈出Dialog,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

場景:在Service 中開啟線程下載升級包,當下載完系統升級包,彈出一個Dialog 提示用戶。

        注意,Android 系統版本不一樣,可能會有不一樣的表現。當前是基于 Android 8.1.0 的 Service 中彈 Dialog。

        首先,就是要在功能清單列表中聲明權限,以下兩個都必須聲明:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/><!--這行代碼必須存在,否則點擊不了系統設置中的按鈕-->
  <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

        然后必須要在MainActivity 進行初始化的時候,再次檢查一下當前應用有沒有被允許顯示在其他應用上層,這一步必不可少。因為當前基于 Android 8.1.0,自從Android 6.0 以后,Google 就對一些敏感權限做了收斂,比如訪問SD卡權限,只是在功能清單列表中聲明權限是不夠的,還要在應用運行期間動態檢查是否被授權,需注意當檢查出來應用未被授予這些權限,還要提醒用戶可能有一些功能無法使用,這個需要注意。

 private void checkMyPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      if (!Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
            Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, 1);
      }
    }
  }
 
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (Settings.canDrawOverlays(this)) {
          Toast.makeText(this, "授權成功", Toast.LENGTH_SHORT).show();
        }else {
          // SYSTEM_ALERT_WINDOW permission not granted...
          Toast.makeText(this, "未被授予權限,相關功能不可用", Toast.LENGTH_SHORT).show();
        }
      }
    }
  }

       接下來,在 Service 中,做如下操作:

//在 Service 中創建全局變量 mHandler
  private Handler mHandler;
//在 Service 生命周期方法 onCreate() 中初始化 mHandler
  mHandler = new Handler(Looper.getMainLooper());
//在子線程中想要 Toast 的地方添加如下
  mHandler.post(new Runnable() {
          @Override
          public void run() {
            //show dialog
            justShowDialog();
          }
        });
 
  private void justShowDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext())
        .setIcon(android.R.drawable.ic_dialog_info)
        .setTitle("service中彈出Dialog了")
        .setMessage("是否關閉dialog?")
        .setPositiveButton("確定",
            new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog,
                        int whichButton) {
              }
            })
        .setNegativeButton("取消",
            new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog,
                        int whichButton) {
              }
            });
    //下面這行代碼放到子線程中會 Can't create handler inside thread that has not called Looper.prepare()
    AlertDialog dialog = builder.create();
    //設置點擊其他地方不可取消此 Dialog
    dialog.setCancelable(false);
    dialog.setCanceledOnTouchOutside(false);
    //8.0系統加強后臺管理,禁止在其他應用和窗口彈提醒彈窗,如果要彈,必須使用TYPE_APPLICATION_OVERLAY,否則彈不出
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY));
    }else {
      dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
    }
    dialog.show();
  }

這樣,在 " Android低版本 -> Android 6.0 -> Android 8.0 -> 更高Android版本" 均可以彈出 Dialog了。

以上是“Android 8.1.0 Service中如何彈出Dialog”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武强县| 若羌县| 泰州市| 忻城县| 永新县| 澎湖县| 镇雄县| 永修县| 西安市| 漳浦县| 鹤庆县| 满城县| 赤壁市| 德钦县| 芒康县| 马山县| 门源| 廊坊市| 奉节县| 常宁市| 铜梁县| 望谟县| 陕西省| 甘孜县| 叶城县| 盐津县| 天水市| 许昌县| 上饶市| 巴林右旗| 门头沟区| 安义县| 乌兰浩特市| 白水县| 卫辉市| 交口县| 渭源县| 安庆市| 千阳县| 义马市| 南岸区|