我正在尝试制作一个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调用 - 我必须在封闭内开始解决失败的连接(通常仅提供应用程序权限或指定帐户) Activity,而AppWidgetProvider不是一个活动,所以我不能把客户端对象放在Provider中,这是我第一次想到的。
我可以将客户端放在Provider中,然后启动一个新活动以在onConnectionFailed期间调用startResolutionForResult调用吗?如果是这样,我将如何启动该意图,使其成为一个“封闭类” - 这是我在尝试将Provider作为startResolutionForResult的参数时得到的错误。
我是小部件和Google API的新手,虽然比使用小部件的API更有经验,但它仍然是Android开发的初学者。谢谢你的帮助。
答案 0 :(得分:0)
有没有一种正确的方法来做到这一点,我错过了?
通过致电onUpdate()
,Service
将startService()
委托给Service
。让该服务与Fit API对话。当AppWidgetManager
从Fit API获取结果时,它会使用stopSelf()
更新应用小部件,然后调用Service
,因为不再需要function onMouseMove( e ) {
var mouse3D = new THREE.Vector3(
( event.clientX / window.innerWidth ) * 2 - 1,
- ( event.clientY / window.innerHeight ) * 2 + 1,
0.5);
eyes.forEach(function(element, index, array) {
element.lookAt(mouse3D);
})
}
。