如果未安装应用,Android Wear API会中断Play服务

时间:2015-02-17 03:55:03

标签: android google-play-services wear-os

这绝对是某种错误,但我不知道在哪里提交此文件,我想知道其他开发人员是否有解决方法。

我制作了这个天气应用程序,我爸爸和妹妹都下载了它。它似乎工作了一段时间。然后我父亲买了一部新手机(来自Republic Wireless的Moto E)。奇怪的是,它在应用程序启动时出错。 (16个来自Google Play服务)。这意味着API不受支持。

我没有尝试访问过多的API。

gapi = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API)
                .addApi(Wearable.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();

然后上周它停止了对我姐姐的电话工作,给出了同样的错误。这没什么意义。我们有相同的手机和相同的运营商。为什么它没有工作?我确定她有最新版本的应用程序。基本上一切都是一样的。我在网上发帖其他人得到了这个错误。我没有。

让我说清楚。我大约一个月前更新了应用程序。我没有发布任何新代码。与此同时,应用程序停止在各种设备上工作,我无法弄清楚原因。

在尝试了几乎所有东西来重现这个bug之后,我终于弄明白了。我卸载了我的Android Wear配套应用程序,这是其他人从未有过的。这样做,我收到了这个错误。 Google Play服务必须创建一些不会优雅失败的错误。

作为一种解决方法,我将尝试这样做:

if(appInstalledOrNot("com.google.android.wearable.app")) {
        gapi = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API)
                .addApi(Wearable.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    } else {
        gapi = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

方法检查包是否已安装。

这不是一个很好的黑客,而是一个由回归引起的黑客攻击。这是解决这个问题的理想方法吗?

1 个答案:

答案 0 :(得分:0)

根据Tips for Error Handling with Android Wear APIs blog post

  

connect()方法有两种方法可以使用Google Play服务返回ConnectionResult.API_UNAVAILABLE以获取可穿戴支持:

     
      
  • 在运行Android 4.2(API级别17)或更早版本
  • 的任何设备上请求Wearable.API时   
  • 在没有Android Wear配套应用程序或设备可用时请求Wearable.API
  •   

因此这是预期的行为。另外根据博文:

  

开发人员的最佳做法是实施两个单独的GoogleApiClient连接:

     
      
  • Android Wear支持的一个连接,
  •   
  • 您需要的所有其他API的单独连接
  •   
     

这将确保您的应用的功能将保留给所有用户,无论他们的设备上是否有可穿戴支持,以及旧的旧设备。

这意味着您可以将可穿戴式呼叫定向到GoogleApiClient仅与Wearable.API相关联(如果未连接则忽略),并将所有其他呼叫定向到其他GoogleApiClient(不依赖于Android Wear。