- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
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)
最佳答案
记录调查结果以供将来引用:
以下是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");
}
}
范围FragmentActivity
中的startActivityForResult()
要求requestCode为16位,表示范围为0到65535。
另外,FragmentActivity
中的 validateRequestPermissionsRequestCode
要求 requestCode 为 16 位,即范围为 0 到 65535。
关于java - Android:为 requestcode 值选择什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33331073/
我认为 requestCode 是某种标识符,仅需要 Intent 或类似的东西,如果我错了,请纠正我。但是如果是这种情况,为什么如果我的pendingintent 的requestCode 是2,当
我有一个使用 startActivityForResult(intent,634) 的 Activity。如果我从 Activity 中使用它,onActivityResult() 中的 reques
我想知道我是否正确理解了 requestCode 和 resultCode 的概念?基本上,我有一个与 Activity 关联的任意整数(requestCode)。例如,在 Notepad tutor
我遇到了问题,但不知道如何解决: 我想在 AndroidStudio 中启动一个结果 Activity ,因此之前我使用 startActivityForResult(intent,1); 并且一切正
我使用请求代码从 MainActivity 调用到 InfomationActivity。但是,当返回 MainActivity 时,它处于非 Activity 状态。这里有什么问题? 在 MainA
为什么显示我的 toast 消息?我的 CEVAP_SORGULA 变量等于 322,但我的 Intent 请求代码是 332 private final static int CEVAP_SORGU
当您调用 startActivityForResult() 时,您还提供“int requestCode”。您如何在启动的 Activity 中获取该参数(以更改那里的一些初始化)? 或者我理解这个参
任何人都可以列出要与 startActivityForResult() 一起传递的 requestCode 的值及其用途吗?另外,您能否解释 setResult 可用的参数,例如 RESULT_OK
我正在尝试关闭从我自己的 Activity 中打开的 Activity 。我认为完成 Activity 是更好的方法,但它不起作用。这是我打开 Activity 的代码。 (与第三方包一起使用,这可能
我正在尝试实现一个提醒应用程序。我将所有提醒详细信息存储在 sqlite 数据库中,例如 id、标题、dateInfo、timeInfo 等。 我想在适当的时候通知用户我将使用 AlarmManage
我正在使用 AlarmManager安排 1 到 35 个警报之间的任意位置(取决于用户输入)。当用户请求安排新的闹钟时,我需要取消当前的闹钟,因此我使用相同的 requestCode 创建所有闹钟,
ActivityCompat.requestPermissions 之类的方法要求我向它们传递一个请求代码,以便稍后在回调中进行测试(在本例中为 onRequestPermissionsResult)
背景: 我正在通过 AlarmManager 使用 PendingIntent 进行警报。 问题: 一开始我以为要取消之前的,我必须提供我之前用来启动警报的确切 requestCode。 但后来我发现
我正在从我的 Fragment 开始一个新的 Activity startActivityForResult(intent, 1); 并希望在 Fragment 的父 Activity 中处理结果:
因为startActivityForResult已弃用。 所以我替换 startActivityForResult至registerForActivityResult这是我的代码: ActivityR
我正在类里面制作一个基本的 android/kotlin 警报应用程序。一旦触发警报,我希望能够从 SQLite 数据库中删除警报,或者如果它是重复警报,则重新设置警报。对于这两个,我需要来自 pen
我不知道我哪里错了。这可能是一个微不足道的错误,但我无法弄清楚。 形成我的第一个 Activity 我开始另一个 Activity 的结果: Intent ccard_intent= new Inte
我正在调用以下方法: Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); st
我看了https://developer.android.com/reference/android/app/Activity对于 startActivityForResult 和 Google Si
我正在开发一个 Android 应用程序,其中包含一个具有多个 fragment 的主机 Activity 。我在我的主机 Activity 和我的 fragment 中使用了 onActivityR
我是一名优秀的程序员,十分优秀!