30

ActivityCompat.requestPermissions जैसे तरीके की आवश्यकता है कि मैं उन्हें एक अनुरोध कोड पास कर दूं जिसे मैं बाद में कॉलबैक में जांच सकता हूं (इस मामले में onRequestPermissionsResult)। क्या अनुरोध है कि मुझे कुछ बेहतरीन अभ्यास प्रकार का मूल्य है जिसे मैं पासकोड में पास करना चाहता हूं? मैंने देखा है कि अगर मैं एक यादृच्छिक int दर्ज मैं कभी कभी इस तरह एक त्रुटि प्राप्त:एंड्रॉइड: अनुरोध कोड के लिए क्या चुनना है?

java.lang.IllegalArgumentException: Can only use lower 8 bits for requestCode 



10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: FATAL EXCEPTION: main 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: Process: my package, PID: 8315 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage.myactivity}: java.lang.IllegalArgumentException: Can only use lower 8 bits for requestCode 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Can only use lower 8 bits for requestCode 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.support.v4.app.FragmentActivity.validateRequestPermissionsRequestCode(FragmentActivity.java:799) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.support.v4.app.ActivityCompatApi23.requestPermissions(ActivityCompat23.java:29) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.support.v4.app.ActivityCompat.requestPermissions(ActivityCompat.java:316) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at mypackage.myactivity.checkReadPhoneState(PermissionsGatewayActivity.java:48) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at mypackage.myactivity.onCreate(PermissionsGatewayActivity.java:36) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.Activity.performCreate(Activity.java:6237) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.-wrap11(ActivityThread.java)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
+3

1 से 255 के बीच अनुरोध कोड आज़माएं। –

+1

इसका क्या अर्थ है? तो सैद्धांतिक रूप से आप समानांतर में 256 से अधिक अनुरोध नहीं चल सकते थे? (हास्यास्पद हालांकि यह होगा) – Jon

+0

मुझे लगता है कि असली दुनिया परिदृश्य में संख्या पर्याप्त है। –

उत्तर

77

भविष्य में संदर्भ के निष्कर्षों का दस्तावेजीकरण:

निम्नलिखित android.support.v4.app.FragmentActivity

/** 
* Modifies the standard behavior to allow results to be delivered to fragments. 
* This imposes a restriction that requestCode be <= 0xffff. 
*/ 
@Override 
public void startActivityForResult(Intent intent, int requestCode) { 
    if (requestCode != -1 && (requestCode&0xffff0000) != 0) { 
     throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); 
    } 
    super.startActivityForResult(intent, requestCode); 
} 
से कोड हैं


@Override 
public final void validateRequestPermissionsRequestCode(int requestCode) { 
    // We use 16 bits of the request code to encode the fragment id when 
    // requesting permissions from a fragment. Hence, requestPermissions() 
    // should validate the code against that but we cannot override it as 
    // we can not then call super and also the ActivityCompat would call 
    // back to this override. To handle this we use dependency inversion 
    // where we are the validator of request codes when requesting 
    // permissions in ActivityCompat. 
    if (!mRequestedPermissionsFromFragment 
      && requestCode != -1 && (requestCode & 0xffff0000) != 0) { 
     throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); 
    } 
} 


रेंज
startActivityForResult()FragmentActivity में अर्थ रेंज से 0 65535 के लिए है, 16 बिट का होना requestCode की आवश्यकता है।

इसके अलावा, FragmentActivity में validateRequestPermissionsRequestCode requestCode 16 बिट का हो सकता है, जिसका अर्थ है सीमा से 0 65535 है की आवश्यकता है।

+1

रेंज बदल गई है। https://android.googlesource.com/platform/frameworks/support/+/86f3b80ddf7f9aa5c5b7afe77217cb75632d62a2 – Toris

+0

@ टोरिस धन्यवाद। मेरा जवाब अपडेट किया गया। – Henry

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