【问题标题】:Android GoogleApiClient.Builder().enableAutoManage causes IllegalArgumentException: Can only use lower 16 bits for requestCodeAndroid GoogleApiClient.Builder().enableAutoManage 导致 IllegalArgumentException: Can only use lower 16 bits for requestCode
【发布时间】:2016-08-25 19:28:39
【问题描述】:

我得到一个 非法参数异常: 尝试初始化此链接here 中提到的 GoogleApiClient 时。

下面是我用来初始化 ApiClient 的代码,后面是错误日志

mApiClient = new GoogleApiClient.Builder(getActivity())
                .addApi(Fitness.HISTORY_API)
                .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
                .addConnectionCallbacks(
                        new GoogleApiClient.ConnectionCallbacks() {
                            @Override
                            public void onConnected(Bundle bundle) {
                                Log.i(TAG, "Connected!!!");
                                
                                // Now you can make calls to the Fitness APIs.
                            }

                            @Override
                            public void onConnectionSuspended(int i) {
                                // If your connection to the sensor gets lost at some point,
                                // you'll be able to determine the reason and react to it here.
                                if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) {
                                    Log.i(TAG, "Connection lost.  Cause: Network Lost.");
                                } else if (i
                                        == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) {
                                    Log.i(TAG,
                                            "Connection lost.  Reason: Service Disconnected");
                                }
                            }
                        }
                )
                .enableAutoManage(getActivity(), 1, new GoogleApiClient.OnConnectionFailedListener() {
                    @Override
                    public void onConnectionFailed(ConnectionResult result) {
                        Log.i(TAG, "Google Play services connection failed. Cause: " +
                                result.toString());
                        
                    }
                })
                .build();

错误日志

Process: fitbark.com.android, PID: 3299
java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
        at android.support.v4.app.BaseFragmentActivityEclair.checkForValidRequestCode(BaseFragmentActivityEclair.java:64)
        at android.support.v4.app.BaseFragmentActivityEclair.startIntentSenderForResult(BaseFragmentActivityEclair.java:45)
        at android.support.v4.app.FragmentActivity.startIntentSenderForResult(FragmentActivity.java:75)
        at com.google.android.gms.common.ConnectionResult.startResolutionForResult(Unknown Source)
        at com.google.android.gms.common.api.internal.zzw$zzb.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:155)
        at android.app.ActivityThread.main(ActivityThread.java:5696)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

当我评论以下方法时,我没有收到任何错误

启用AutoManage()

我知道错误是由于应用程序调用 startActivityWithResult() 且 requestCode 大于 16 位,但我不明白它到底发生在哪里以及如何解决?

【问题讨论】:

  • 有同样的错误。几个月以来没有代码更改,但开始出现崩溃

标签: android google-api-client google-fit google-play-services


【解决方案1】:

如果您发生此错误

  1. 限制 google play services-app 的权限和
  2. 同时定位旧的播放服务版本和更新的支持库版本。

您使用的是哪个版本的 google play 服务以及哪个 android 支持库?

我也遇到了同样的问题,已经被this google+ post解决了:

在开发使用 google fit 功能的应用程序时,我们遇到了一个问题。当我们将支持库更新到 24.0.0-beta1 版本时,它会在为 google fit 构建客户端时引发 requestCode 异常。 IllegalArgumentException: requestCode 只能使用低 16 位

...

找到原因,将播放服务更新到 9.0.1 已修复。

因此,更新播放服务库或降级支持库可能会有所帮助。

如果您执行更新/降级,但仍未授予播放服务应用程序的完整权限,您将看到由 enableAutoManage() 方法引起的权限请求对话框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多