我正在尝试获得用户授予的BIND_NOTIFICATION_LISTENER_SERVICE
权限。
为此,我使用以下方法在正确的位置打开设置应用程序:
Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
startActivity(intent);
这里有什么奇怪的设置是打开两次设置(如果按一下后退按钮,相同的设置屏幕会再次打开)
但是,在onResume()
我然后使用以下方法检查是否已授予权限:
if(ContextCompat.checkSelfPermission(context,Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE)== PackageManager.PERMISSION_GRANTED){
//open next activity
}
现在问题在于:用户是否在设置中授予了权限并不重要,因为checkSelfPermission()
始终返回PERMISSION_DENIED
。
现在它变得非常奇怪:我的NotificationListenerService
被实例化,绑定并完全正常工作,尽管根据checkSelfPermission()
尚未授予权限。
我应该知道用户是否授予了权限?
我的清单中的许可和服务声明:
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
<application>
<service
android:name=".service.NotificationListener"
android:directBootAware="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
</application>
我的NotificationListenerService
:
public class NotificationListener extends NotificationListenerService {
private static final String TAG = NotificationListener.class.getSimpleName();
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
super.onNotificationPosted(sbn);
Log.d(TAG, "onNotificationPosted: "+sbn.getNotification().tickerText + " ;" + sbn.getPackageName());
}
}
我已经尝试过:
PermissionChecker.checkSelfPermission
(我不知道与ContextCompat.checkSelfPermission()相比有什么不同,但它会返回相同的结果)答案 0 :(得分:0)
根据documentation权限BIND_NOTIFICATION_LISTENER_SERVICE
有:
保护等级:签名
这意味着,只有系统应用程序才能拥有它并使用它。只有当权限具有:
时,才能通过您定义的方式请求权限保护等级:危险
如果您的应用不是系统应用,并且您没有根据设备生根,可以使用自定义证书在其上安装自定义ROM(您的应用也必须使用它进行签名),那么您就是不能获得此许可。