2017-04-22 367 views
8

我有一个奇怪的Android权限拒绝,这里是:的Android permission.INTERACT_ACROSS_USERS拒绝

java.lang.SecurityException: Permission Denial: isUserRunning() from pid=1078, uid=10284 requires android.permission.INTERACT_ACROSS_USERS 

我还没有发现任何关于android.permission.INTERACT_ACROSS_USERS只有android.permission.INTERACT_ACROSS_USERS_FULL

以下是完整的logcat的:

java.lang.SecurityException: Permission Denial: isUserRunning() from pid=25403, uid=10310 requires android.permission.INTERACT_ACROSS_USERS 
    at android.os.Parcel.readException(Parcel.java:1693) 
    at android.os.Parcel.readException(Parcel.java:1646) 
    at android.app.ActivityManagerProxy.isUserRunning(ActivityManagerNative.java:7000) 
    at android.os.UserManager.isUserUnlocked(UserManager.java:1069) 
    at android.os.UserManager.isUserUnlocked(UserManager.java:1063) 
    at com.android.launcher3.compat.UserManagerCompatVN.isUserUnlocked(UserManagerCompatVN.java:39) 
    at com.android.launcher3.LauncherModel$LoaderTask.loadWorkspace(LauncherModel.java:1759) 
    at com.android.launcher3.LauncherModel$LoaderTask.loadAndBindWorkspace(LauncherModel.java:1387) 
    at com.android.launcher3.LauncherModel$LoaderTask.run(LauncherModel.java:1486) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 

我已经添加到了我的清单:

<permission android:name="android.permission.INTERACT_ACROSS_USERS" android:protectionLevel="signature"/> 
<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/> 
+0

[安卓permission.INTERACT \ _ACROSS \ _USERS \ _FULL](可能的重复http://stackoverflow.com/questions/28134128/android-permission-interact-across-users-full ) – cammando

+0

除非您正在处理'com.android.launcher3'的某个分支,否则该Java堆栈跟踪看起来不是来自您的应用程序。 – CommonsWare

+0

那么@CommonsWare我可以做什么? –

回答

-3

您应该在运行时在Android中实现权限请求,特别是棉花糖或更高版本。 如果您没有实现运行时权限,那么您的应用程序将崩溃或无法在具有棉花糖的设备上正常工作。

我希望你现在非常清楚Marshmallow中的Runtime Permission概念。我们先来了解这个代码:

int currentAPIVersion = Build.VERSION.SDK_INT; 
if(currentAPIVersion>=android.os.Build.VERSION_CODES.M) 
{ 
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.INTERACT_ACROSS_USERS) != PackageManager.PERMISSION_GRANTED) { 
     if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.INTERACT_ACROSS_USERS)) { 
      AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); 
      alertBuilder.setCancelable(true); 
      alertBuilder.setTitle("Permission necessary"); 
      alertBuilder.setMessage("Interact across users permission is necessary to this app"); 
      alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.INTERACT_ACROSS_USERS}, MY_PERMISSIONS_REQUEST_INTERACT_ACROSS_USERS); 
       } 
      }); 
      AlertDialog alert = alertBuilder.create(); 
      alert.show(); 
     } else { 
      ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.INTERACT_ACROSS_USERS}, MY_PERMISSIONS_REQUEST_INTERACT_ACROSS_USERS); 
     } 
    } 
} 


@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
case MY_PERMISSIONS_REQUEST_INTERACT_ACROSS_USERS: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // do something here... 
       Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 
     } else { 
     //code for deny 
     Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 

} 
     break; 
    } 
} 
+2

Manifest没有INTERACT_ACROSS_USERS,它会导致错误! –