2017-04-22 7 views
8

मैं एक अजीब एंड्रॉयड अनुमति इनकार कर दिया है, यहाँ यह है:एंड्रॉयड 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' के कुछ कांटा पर काम नहीं कर रहे हैं, तो जावा स्टैक ट्रेस आपके ऐप से नहीं दिख रहा है। – CommonsWare

+0

तो @ कॉमन्सवेयर मैं क्या कर सकता हूं? –

उत्तर

-3

आपको एंड्रॉइड में रन-टाइम पर विशेष रूप से मार्शमलो या उच्च संस्करण के लिए अनुमति अनुरोध लागू करना चाहिए। यदि आप रन-टाइम अनुमति को लागू नहीं करते हैं, तो आपका एप्लिकेशन क्रैश हो जाएगा या मार्शमलो वाले डिवाइस पर ठीक से काम नहीं करेगा।

मुझे आशा है कि अब आप मार्शमलो में रनटाइम अनुमति अवधारणा के बारे में बहुत ज्यादा जागरूक हैं।

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

मेनिफेस्ट में INTERACT_ACROSS_USERS नहीं हैं, यह त्रुटि का कारण बनता है! –

संबंधित मुद्दे