【问题标题】:How to get info from a Google API during a widget's onUpdate function?如何在小部件的 onUpdate 功能期间从 Google API 获取信息?
【发布时间】:2023-03-07 01:11:02
【问题描述】:

我正在尝试制作一个显示来自 Google API 的信息的 android 小部件,特别是 Fitness API。现在,Fitness API 客户端(GoogleAPIClient 对象)在 Main 活动中设置为公共静态变量,onUpdate 函数获取它,调用 .connect(),然后尝试从该 API 获取信息。它可以工作,但只有当应用程序的主要活动处于活动状态时 - 如果我关闭它,那么下次应用程序更新时,它会因错误而崩溃:

    java.lang.RuntimeException: Unable to start receiver
    Caused by: java.lang.NullPointerException

在 onUpdate() 函数中的 .connect() 调用处。

有没有我想念的正确方法来做到这一点?如何做到这一点,以便每次调用 onUpdate 时都能获取信息,但仍处理 onConnectionFailed 调用 - 我必须在封闭内开始解决失败的连接(通常只是给予应用程序权限或指定帐户) Activity,而AppWidgetProvider不是Activity,所以不能直接把client对象放在Provider里面,这是我第一个想到的。

我可以将客户端放在 Provider 中,然后在 onConnectionFailed 期间启动一个新活动以传递给 startResolutionForResult 调用吗?如果是这样,我将如何启动该意图,以便将其视为“封闭类” - 这是我尝试将 Provider 作为 startResolutionForResult 的参数时遇到的错误。

我对小部件和 Google API 都是新手,总体而言,我仍然是 Android 开发的初学者,尽管这方面的经验比 API 小部件的经验要丰富得多。感谢您的帮助。

【问题讨论】:

    标签: android google-api android-widget google-fit


    【解决方案1】:

    有没有我想念的正确方法来做到这一点?

    通过调用startService()onUpdate() 将工作委托给Service。让该服务与 Fit API 对话。当Service 从 Fit API 获取结果时,它会使用 AppWidgetManager 更新应用小部件,然后调用 stopSelf(),因为不再需要 Service

    【讨论】:

    • 那么我会在服务类中声明 fit API 客户端和所有相关方法吗?如果是这样,我如何启动一个活动来处理 onConnectionFailed 调用?如果没有,并且我将客户端保持在主活动中,那么当主活动不活动时,服务如何解决空指针问题?
    • @JamesS:“那么我会在服务类中声明 fit API 客户端和所有相关方法吗?” - 是的。 “我如何启动一个活动来处理 onConnectionFailed 调用?” -- 你没有开始一个活动。作为应用程序小部件更新的一部分,您正在执行此操作。请不要打扰用户。改为提出Notification
    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多