華爲Android 8.0以上懸浮窗權限正確開啓方式

懸浮窗權限總結

開發中在android 8.0上遇到了一個判斷懸浮窗權限是否開啓的問題,當在一個界面彈出dialog提示用戶開啓懸浮窗權限,用戶點擊之後,跳轉到設置界面開啓懸浮窗權限,然後返回該頁面,Settings.canDrawOverlays(context) 進行權限開啓的判斷,結果返回的是false;程序接收到的是權限沒有開啓,但是到設置裏面查看確實是開啓了的。而且當你對界面有刷新操作之後(去到其他界面、退出重新進入、點擊按鈕等等),檢測到權限也是開啓的。但是當你從界面跳轉到設置並開啓權限,然後返回界面直接調用Settings.canDrawOverlays(context)方法判斷顯示的是未開啓。
搞得我很頭暈,網上找了一堆資料,都沒有效果,最後無意間註釋了一行代碼,

 // intent.setData(Uri.parse("package:" + getPackageName()));

結果一切都恢復正常了,我艹了,8.0以上的手機就是坑呀!再次記錄一下,希望對遇到我這樣問題的人有幫助;

完整的代碼如下:

    private void requestSettingCanDrawOverlays() {
        Toast.makeText(SplashActivity.this, "請打開顯示懸浮窗開關!", Toast.LENGTH_LONG).show();
        int sdkInt = Build.VERSION.SDK_INT;
        if (sdkInt >= Build.VERSION_CODES.O) {//8.0以上
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
        } else if (sdkInt >= Build.VERSION_CODES.M) {//6.0-8.0
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
        } else {//4.4-6.0一下
            //無需處理了
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章