如何在窗口小部件的onUpdate函数中从Google API获取信息?

时间:2015-06-21 21:52:52

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

我正在尝试制作一个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开发的初学者。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

  

有没有一种正确的方法来做到这一点,我错过了?

通过致电onUpdate()ServicestartService()委托给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); }) }