我正在尝试向我的应用提供通知访问权限,因为我在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
,但不明白如何使用它。任何人都可以帮助我。
理想情况下,我应首先检查访问状态,然后在获取错误时,我应调用意图打开通知设置。
答案 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})