Android 新许可';s模型和RemoteViewsFactory
我正在尝试使用新的安卓6的权限模型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
<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()
设置。canDrawOverlays、AppsManager.checkOpNoThrow和设置。System.canWrite在各种情况下都会导致此类崩溃(可能仅在安卓6.x上),如下所述:
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.canDrawOverlays、AppsManager.checkOpNoThrow和Setting.System.canWrite在各种情况下(可能仅在Android 6.x上)都会导致此类崩溃,如下所述:
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的最终版本。