Ответ 1
Вам нужно передать положительное число на startActivityForResult
.
Я пишу приложение, где Activity A
запускает Activity B
, используя
startActivityForResult(intent, -101);
но при вызове он ответил на следующий журнал ошибок:
E/AndroidRuntime( 1708): java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
E/AndroidRuntime( 1708): at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:837)
Вероятно, это может быть -101, но я не уверен. Кто-нибудь знает об этом?
Вам нужно передать положительное число на startActivityForResult
.
Вы получаете это исключение только в android.support.v4.app.FragmentActivity
, а не при использовании android.app.Activity
.
startActivityForResult()
в FragmentActivity
требует, чтобы requestCode
состоял из 16 бит, то есть диапазон от 0 до 65535.
Кроме того, validateRequestPermissionsRequestCode
в FragmentActivity
требует, чтобы requestCode
состоял из 16 бит, то есть диапазон от 0 до 65535.
Для получения дополнительной информации (если вы хотите увидеть исходный код): fooobar.com/questions/176981/...
Также полезно отметить, что это может произойти, если вы используете число больше 2 ^ 16/2 (это 32768), так что в основном 2 ^ 15 вариантов, чтобы не испортить это.
Объяснение: 16 бит могут представлять один из 65536 номеров, однако половина из них отрицательна.
Вы можете использовать только младшие 16 бит для средства requestCode - в двоичных выражениях - вы можете использовать
0000000000000000 (16 bits) to 1111111111111111 (16 bits)
.
В десятичных ( "числовых" ) условиях это позволяет использовать комбинации 2^16 = 65536
. Таким образом, вы можете использовать только цифры 0 до 65535.
Вы также не можете использовать отрицательные числа.