2017-04-22 368 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,它會導致錯誤! –