Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么ActivityCompat.requestPermissions()只接受0-255之间的整数请求代码?_Java_Android_Android Support Library_Android Permissions - Fatal编程技术网

Java 为什么ActivityCompat.requestPermissions()只接受0-255之间的整数请求代码?

Java 为什么ActivityCompat.requestPermissions()只接受0-255之间的整数请求代码?,java,android,android-support-library,android-permissions,Java,Android,Android Support Library,Android Permissions,我最近将一个应用程序更新为targetSdkVersion 23,并实现了对各种权限的请求。我最初尝试使用导致从FragmentActivity的内部抛出IllegalArgumentException: int REQUEST_CODE_A = 9001; ActivityCompat.requestPermissions(new String[ {Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_A); // crashes java.la

我最近将一个应用程序更新为targetSdkVersion 23,并实现了对各种权限的请求。我最初尝试使用导致从FragmentActivity的内部抛出IllegalArgumentException:

int REQUEST_CODE_A = 9001;
ActivityCompat.requestPermissions(new String[ {Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_A); // crashes
java.lang.IllegalArgumentException:只能对请求代码使用较低的8位

但是,如果请求代码在0-255之间,则一切正常,权限请求按预期工作

int REQUEST_CODE_B = 101;
ActivityCompat.requestPermissions(new String[ {Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_B); // works correctly
所以问题是,在API中限制整数的可能值有什么原因?同样的信息可以用字节来提供,但是(显然)有意识地决定用整数来代替。这仅仅是允许将来扩展的一种情况吗?

引用出现此异常的地方:

    // We use 8 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.

startActivityForResult()
对请求代码有16位限制,至少在
FragmentActivity

这种情况下,8位和16位限制优化是否可能重复?我不确定为什么两个“独立”的值会存储在一个变量中。@Fractal扳手:“我不确定为什么两个“独立”的值会存储在一个变量中”--因为
startActivityForResult()
是IPC,就像
onActivityResult()
一样。并且,协议表示请求代码是一个值,在
startActivityForResult()
中提供,在
onActivityResult()中返回。一种更灵活的方法是让我们传递任意的
可包裹的东西,然后把
可包裹的东西(或者,从技术上说,一份副本)拿回来,但是,不管出于什么原因,他们十年前没有这样做。