【问题标题】:Android Wear API breaks Play Services if app not installed如果未安装应用程序,Android Wear API 会中断 Play Services
【发布时间】:2015-02-17 03:55:03
【问题描述】:

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

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

我没有尝试访问太多 API。

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

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

让我说清楚。我大约一个月前更新了应用程序。我没有发布任何新代码。与此同时,该应用程序停止在各种设备上运行,我不知道为什么。

在尝试了几乎所有方法来重现此错误之后,我终于弄明白了。我卸载了我的 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();
    }

方法在哪里检查是否安装了包。

这不是一个很好的 hack,而是由回归引起的。这是解决问题的好方法吗?

【问题讨论】:

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


    【解决方案1】:

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

    connect() 方法可以通过两种方式返回 ConnectionResult.API_UNAVAILABLE 以获得 Google Play 服务的可穿戴设备支持:

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

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

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

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

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

    这意味着您可以将可穿戴设备呼叫定向到仅连接到 Wearable.APIGoogleApiClient(如果未连接则忽略),并将所有其他呼叫定向到不同的 GoogleApiClient(不依赖于 Android Wear )。

    【讨论】:

    • 好吧,从技术上讲,它可以按预期实现,但令人讨厌的是他们最初没有这个,然后突然实现它。我也找不到有关此错误的文档。感谢您的回答。
    • 自该博文于 2013 年 10 月发布以来一直如此。此外,在 developer.android.com 上搜索 API_UNAVAILABLE 会显示该博文和 Accessing Google APIs training page 具有相同的注意Wearable.API的使用。
    • 那么也许在我的开发时间之间有一个错误,我可以做到这一点,他们修复了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多