如何檢測應用通知權限?如何跳轉通知權限設置頁?

如何檢測應用通知權限?

通常狀況下,Api 19 之前是沒有通知管理的,默認都是開啓,不用管。 Api 19 -- 24 雖加入了通知管理功能,但沒有開放檢測是否開啓了通知的接口,開發者只能用反射來獲取權限值。 Api 24 以上,NotificationManager 提供了 areNotificationsEnabled()方法檢測通知權限。 support 包已經考慮了以上場景,在 24.1.0 開放了areNotificationsEnabled(),在19如下默認返回true,19-24返回對應反射值,24以上用原生NotificationManager 檢測。html


特殊狀況是部分國產機,加入了通知相關定製功能,開發者是無從控制的或檢測的,徹底瞎子。好比下面這種通知是否顯示在 status bar 的管理。 java

也就是說,大部分狀況,咱們用:

NotificationManagerCompat.from(context).areNotificationsEnabled() 
複製代碼

可適配除部分國產機之外的大部分機型。特殊機型暫時沒辦法,有小夥伴知道怎麼搞的話求告知。android

如何跳轉通知權限設置頁?

一樣與 api 版本和機型有關。git

api 版本

>=21:github

//21 以上,直接跳通知欄權限設置頁
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
            intent.putExtra("app_package", context.getPackageName());
            intent.putExtra("app_uid", context.getApplicationInfo().uid);
        }
複製代碼

9<=,<21:api

//9 - 21,只能跳到 app 詳情頁
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD){
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setData(Uri.fromParts("package", context.getPackageName(), null));
        } 
複製代碼

<9:app

//9如下的 app 詳情頁
else if(Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD){
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setAction(Intent.ACTION_VIEW);
            intent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
            intent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
        }
複製代碼

機型

有些國產機是提供本身的權限管家軟件管理通知權限的,對於這些機子,儘可能跳轉到權限對應的管家頁面。 部分 vivo:工具

// 點擊設置圖標>加速白名單>個人app
        // 點擊軟件管理>軟件管理權限>軟件>個人app>信任該軟件
        Intent appIntent = context.getPackageManager().getLaunchIntentForPackage("com.iqoo.secure");
        if(appIntent != null){
            Log.i("isPushEnable","start1");
            context.startActivity(appIntent);
            return;
        }
複製代碼

部分 oppo:測試

// oppo 點擊設置圖標>應用權限管理>按應用程序管理>個人app>我信任該應用
        // 點擊權限隱私>自啓動管理>個人app
        appIntent = context.getPackageManager().getLaunchIntentForPackage("com.oppo.safe");
        if(appIntent != null){
            Log.i("isPushEnable","start2");
            context.startActivity(appIntent);
            return;
        }
複製代碼

其餘機型待測試補充... 以上跳轉業務我集合成了一個小工具 NotificationPageHelper,安裝後 NotificationPageHelper.open(Context context) 便可。ui

參考:

  1. areNotificationsEnabled
  2. Android 4.1: How to check notifications are disabled for the application?
  3. Android如何在app中經過一個按鈕直接跳轉到的系統的權限設置頁面
相關文章
相關標籤/搜索