我刚刚在Play商店发布了一个应用程序,并从这个堆栈跟踪的星系注释4获得了崩溃报告:
java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
at android.support.v4.app.q.a(Unknown Source)
at android.support.v4.app.q.startIntentSenderForResult(Unknown Source)
at android.support.v4.app.x.startIntentSenderForResult(Unknown Source)
at com.google.android.gms.common.ConnectionResult.a(Unknown Source)
at com.google.android.gms.common.api.internal.ba.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
我已经在多台设备上测试了我的应用,并且从未遇到过这样的错误!我确实有我认为可能是罪魁祸首的程序吗?你们有什么感想?应用程序崩溃了第一个活动,我只有一个requestCode,其值为111.我不明白为什么我会得到这个异常。 Google登录是在第一个活动中实现的,这里是使用requestCode的地方:
private static final int SIGN_IN_REQUEST_CODE = 111 ; (instance variable)
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, SIGN_IN_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SIGN_IN_REQUEST_CODE) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
谢谢, Sameer
答案 0 :(得分:1)
我在SO中发现了其他一些问题同样存在问题,似乎有些原因您的请求代码大于最大值。
仅在少数设备中出现问题可能是因为问题在以后的版本中得到解决。
此代码来自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);
}
如果您的问题发生,上面的代码会抛出异常,因此您可以在任何设备中进行测试,只需覆盖您活动的方法。
如果您在Integer
int
,我似乎在评论中可能不会出现此问题
另一种解决方法可能是使用某些APP Compat库。