创建新的 GoogleApiClient 时的状态码 16

Posted

技术标签:

【中文标题】创建新的 GoogleApiClient 时的状态码 16【英文标题】:Status Code 16 when creating new GoogleApiClient 【发布时间】:2015-05-25 00:18:55 【问题描述】:

我正在尝试创建一个基本的可穿戴应用程序,它接受来自主 android 应用程序的新位图。不幸的是,当我尝试 .build() GoogleApiClient 时,连接失败的侦听器被调用,错误代码为 16。

这是从 ConnectionFailedListener 收到的确切错误

03-21 13:36:35.903 3089-3089/com.example.android.wearable.watchface D/Watch Face Config﹕onConnectionFailed: ConnectionResultstatusCode=unknown status code 16, resolution=null


应用代码:

        // create the api client to allow sending information to the wearable
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() 
                @Override
                public void onConnected(Bundle connectionHint) 
                    Log.d(TAG, "onConnected: " + connectionHint);
                    // Now you can use the Data Layer API
                
                @Override
                public void onConnectionSuspended(int cause) 
                    Log.d(TAG, "onConnectionSuspended: " + cause);
                
            )
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() 
                @Override
                public void onConnectionFailed(ConnectionResult result) 
                    Log.d(TAG, "onConnectionFailed: " + result);
                
            )
                    // Request access only to the Wearable API
            .addApi(Wearable.API)
            .build();

在可穿戴应用程序中,我创建了一个 DataListenerService,但目前这并不重要,因为 API 构建不正确。

感谢任何帮助或cmets!

更新 - 我将模拟器设备目标从 Google APIs 更改为 Android 5.0.1,错误更改为:

03-21 14:18:24.620 3025-3025/com.example.android.wearable.watchface D/Watch Face Config﹕onConnectionFailed: ConnectionResultstatusCode=SERVICE_MISSING, resolution=null

更新 2 - 找到 this 文章并按照说明进行操作。然后我的应用程序无法编译。之后,我根据标记的答案建议去了 SDK 管理器并检查了 Google Play 服务(它们没有安装)。现在应用程序已构建,但仍然出现上述 SERVICE_MISSING 错误。

【问题讨论】:

您的手机上安装了 Android Wear 吗? 我正在使用模拟器 【参考方案1】:

您需要在设备上安装 Google Play 服务和 Android Wear app 才能使用 Wea​​rable API。默认情况下,模拟器没有它,所以要么手动安装它,要么使用已经有它的设备。

如果您使用 Genymotion,只需 download Google Play Services 并在模拟器上拖放即可。然后使用您的 Google 帐户登录并使用 Play 商店下载 Android Wear 应用。

更多信息here 和here。

如果您使用 Genymotion,则应立即开始使用,因为它比标准 AVD 快得多。

请记住,虽然这将使您的GoogleApiClient 成功连接,但如果您想真正使用可穿戴设备,您仍然需要在模拟器和可穿戴设备(或可穿戴模拟器)之间建立连接API。所以请参考其他关于如何创建或模拟蓝牙连接的问题,for example this one。

编辑:如今,官方的 Android 模拟器速度更快,并且开箱即用地安装了 Google Play 服务。

【讨论】:

您对如何在模拟器中安装 Wear 应用有任何指导吗?【参考方案2】:

查看这个 SO 问题:

Android Wear - Unexpected error code 16

我遇到了类似的问题。错误代码告诉您未安装 Android Wear 应用程序。在您的 onConnectionFailedListener 中,您需要添加如下内容:

// Connection failed listener method for a client that only
// requests access to the Wearable API
@Override
public void onConnectionFailed(ConnectionResult result) 
    if (result.getErrorCode() == ConnectionResult.API_UNAVAILABLE) 
    // The Android Wear app is not installed
    
    ...

从这里开始:

https://developer.android.com/google/auth/api-client.html#Starting

“访问可穿戴 API”

【讨论】:

以上是关于创建新的 GoogleApiClient 时的状态码 16的主要内容,如果未能解决你的问题,请参考以下文章

Android - GoogleApiClient 实例在 IntentService 中的 .connect() 和 onConnected() 之间丢失

实施 GoogleApiClient 时遇到问题

不变模式-类行为型

《JAVA与模式》之不变模式

设计模式-不变模式

原型模式