获取通知访问授予状态

时间:2017-06-23 14:29:13

标签: java android notifications

我正在尝试向我的应用提供通知访问权限,因为我在Manifest中添加了以下权限

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

此外,我已在活动中注册了以下听众。

IntentFilter notlist = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                notlist = new IntentFilter(ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED);
            }
            Intent notlistch = registerReceiver(null,notlist);

现在,当用户点击按钮时,我有以下代码

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                            startActivity(new Intent(ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS));
                                        }

现在,如果我点击上面带有上述代码的按钮,这将始终带我进行通知设置,因此如果我的应用程序在第一次点击期间有权访问,我怎么能在投掷打开设置的意图之前检查它。

我读过使用ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED,但不明白如何使用它。任何人都可以帮助我。

理想情况下,我应首先检查访问状态,然后在获取错误时,我应调用意图打开通知设置。

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式检查:

 if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_NOTIFICATION_POLICY) != PackageManager.PERMISSION_GRANTED) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_NOTIFICATION_POLICY)) {

    } else {
           ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_NOTIFICATION_POLICY}, RC_ACCESS_NOTIFICATION_POLICY);

   }
}

RC_ACCESS_NOTIFICATION_POLICY是您可以通过onPermissionGranted以这种方式获得结果的关键

答案 1 :(得分:0)

private boolean isNotificationAccessGiven() {
    boolean enabled = false;
    Set<String> enabledListenerPackagesSet = NotificationManagerCompat.getEnabledListenerPackages(context);
    for (String string: enabledListenerPackagesSet)
        if (string.contains(getPackageName())) enabled = true;
    return enabled;
}

如上所述here

自支持库(mentioned here)更新以来,有一种新的方法。

你可以像这样使用它:

User.joins(:applications).where(email: email).where(applications: { key: key, id: id})