Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 新许可';s模型和RemoteViewsFactory_Android_Android Permissions_Android 6.0 Marshmallow_Remoteview_Android Appcompat - Fatal编程技术网

Android 新许可';s模型和RemoteViewsFactory

Android 新许可';s模型和RemoteViewsFactory,android,android-permissions,android-6.0-marshmallow,remoteview,android-appcompat,Android,Android Permissions,Android 6.0 Marshmallow,Remoteview,Android Appcompat,我正在尝试使用新的安卓6的权限模型 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 日志: java.lang.SecurityException:uid 10153没有 android.permission.UPDATE\u APP\u OPS\u STATS。 位于android.os.Parcel.readException(Parcel.java:1599) 在android

我正在尝试使用新的安卓6的权限模型

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
日志:

java.lang.SecurityException:uid 10153没有 android.permission.UPDATE\u APP\u OPS\u STATS。 位于android.os.Parcel.readException(Parcel.java:1599) 在android.os.Parcel.readException(Parcel.java:1552)中 在com.android.internal.app.IAppOpsService$Stub$Proxy.checkOperation(IAppOpsService.java:327) 在android.app.apppsmanager.checkOpNoThrow(apppsmanager.java:1523) 在android.provider.Settings.isCallingPackageAllowed上执行AppOpsProtectedOperation(Settings.java:8425) 在android.provider.Settings.isCallingPackageAllowedToDrawOverlays(Settings.java:8385) 位于android.provider.Settings.canDrawOverlays(Settings.java:1432)

有人能给我解释一下这个例外吗

更新


暂时解决了从RemoteViewsFactory的
onDataSetChanged()
内部启动的服务调用
canDrawOverlays()
设置。canDrawOverlaysAppsManager.checkOpNoThrow设置。System.canWrite在各种情况下都会导致此类崩溃(可能仅在安卓6.x上),如下所述:

我发现的解决方法是使用处理程序在UI线程上运行所有这些操作,然后等待正在处理的线程上的结果。下面是扩展NotificationListenerService的示例:

public void onNotificationPosted(StatusBarNotification sbn) {
   final Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        @Override
        public void run() {
            //do the check of Settings.canDrawOverlays here.
            // notify that the result of the check was done
        }
    });
    //wait for result of the handler

Settings.canDrawOverlaysAppsManager.checkOpNoThrowSetting.System.canWrite在各种情况下(可能仅在Android 6.x上)都会导致此类崩溃,如下所述:

我发现的解决方法是使用处理程序在UI线程上运行所有这些操作,然后等待正在处理的线程上的结果。下面是扩展NotificationListenerService的示例:

public void onNotificationPosted(StatusBarNotification sbn) {
   final Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        @Override
        public void run() {
            //do the check of Settings.canDrawOverlays here.
            // notify that the result of the check was done
        }
    });
    //wait for result of the handler

这很奇怪。你的应用程序uid 10153吗?你用什么设备或模拟器来测试这个?我在真实设备Nexus 5上用M预览得到这个,在emulator Nexus 5上用API 23得到同样的结果。6.0最终版的图像,所以你可以尝试在Nexus 5上更新到6.0最终版,看看会发生什么。你可以尝试的另一件事是调用
canDrawOverlays()
从其他地方(例如,启动器活动)查看发生了什么。我自己还没有使用该方法,但我需要尽快完成。在同一个应用程序中调用canDrawOverlays()从一个活动中可以很好地工作。我将很快试用Android 6的最终版本。这很奇怪。你的应用程序uid 10153吗?你用什么设备或模拟器来测试这个?我在真实设备Nexus 5上用M Preview得到这个,在模拟器Nexus 5上用API 23得到同样的结果。6.0 final的图像,所以你可以尝试在Nexus 5上更新到6.0 final,然后查看发生了什么。你可以尝试的另一件事是从其他地方调用
canDrawOverlays()
,看看会发生什么。我自己还没有使用过这个方法,不过我需要尽快完成。在同一个应用程序中,从活动调用canDrawOverlays(),效果很好。我将很快试用Android 6的最终版本。