只能使用低16位作为requestCode(Google Play服务)

6
我遇到了错误。
IllegalArgumentException: Can only use lower 16 bits for requestCode

当我在应用程序中按下“启用Google Play服务”时,我的应用程序会执行以下代码:
private boolean checkPlayServices() {
    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    Log.d("resultCode", String.valueOf(resultCode));
    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this, GooglePlayServicesUtil.GOOGLE_PLAY_SERVICES_VERSION_CODE).show();
        } else {
            Log.i("FUApp", "This device is not supported.");
            finish();
        }
        return false;
    }
    return true;
}

这是错误的堆栈跟踪信息:
01-29 14:15:30.714  10725-10725/com.example.fitnessunlimited.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.fitnessunlimited.android, PID: 10725
java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:837)
        at com.google.android.gms.internal.i.onClick(Unknown Source)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)

我该如何修复这个错误?在Google Now上按下启用按钮可以工作,但在我正在构建的应用程序中无法工作。

你从哪里开始这个活动?粘贴那段代码。 - Zohra Khan
我只看到了一半的注释。我的意思是当你按下按钮时,可能会发送意图来启动它。请发布那段代码。 - Zohra Khan
我没有为按钮按下编写任何代码,所有的处理都由上面的代码处理。 - TMH
当我在我的应用程序中按下启用Google Play服务时,您在问题中编写了这行代码。 - Zohra Khan
给我你的完整代码。 - Zohra Khan
显示剩余4条评论
1个回答

4
我的问题是:
GooglePlayServicesUtil.getErrorDialog(resultCode, this, GooglePlayServicesUtil.GOOGLE_PLAY_SERVICES_VERSION_CODE)

将该行更改为:

GooglePlayServicesUtil.getErrorDialog(resultCode, this, 9000)

使按钮正常工作并打开设置页面。

K个好评。将其字面意思定义为:private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;,因为CONNECTION_FAILURE_RESOLUTION_REQUEST可能会在其他位置使用。 - Zohra Khan
是的,那就是我得到这个数字的地方,现在我已经将它移入了那个变量中,我已经看到它可以工作了。 - TMH
抱歉,它很容易被破解,但我从未阅读过getErrorDialog的完整行。仅通过查看logcat,我总是假设它与startAcitivityResult有关。 - Zohra Khan
2
为什么是9000而不是10或1?这里有什么区别?我看到过不同的数字。 - Jorge
1
9000是完全任意的。它只需要是您在其他地方没有使用过的活动请求代码(例如onActivityResult的requestCode),并且需要低于65536,以符合Android的奥秘原因。 - user153275

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接