我正在尝试制作一个android小部件,显示来自Google API的信息,特别是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调用-我必须在封闭活动中启动对失败连接的解析(通常只是给应用程序权限或指定帐户),而AppWidgetProvider不是活动,所以我不能只将客户端对象放在Provider中,这是我的第一个想法。
我可以将客户端放入提供程序中,然后在onConnectionFailed期间启动一个新活动以传递到startResolutionForResult调用中吗?如果是这样的话,我该如何启动该意图,使其算作"封闭类"——这是我试图将Provider作为startResolutionForResult的参数时遇到的错误。
我对小部件和Google API都是新手,总体来说,我还是Android开发的初学者,尽管我在这方面比API的小部件更有经验。谢谢你的帮助。
有没有一种合适的方法来做我错过的事情?
让onUpdate()
通过调用startService()
将工作委派给Service
。让该服务与Fit API进行沟通。当Service
从Fit API获得结果时,它使用AppWidgetManager
更新应用程序小部件,然后在不再需要Service
时调用stopSelf()
。