也许有些事情非常简单,我不明白。我尝试从某个API调用方法,并且此方法要求PendingIntent异步向我发送一些值。我已经阅读了半个小时的文档和示例,并且不能用简单的方法来解决这个问题。
更确切地说,我想调用ActivityRecognitionApi。 为了说明,这里是我如何从类似的api接收位置:
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient,
mLocationRequest,
new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// I can do something with the location
}
});
所以我想做同样的事情来接收公认的活动:
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleApiClient,
1000,
// ... what here ?);
那么创建pendingIntent以获得该值的简单方法是什么?我试图创建一个匿名的PendingIntent,但该类是最终的。我不想启动服务,活动或广播任何内容......是否只有一种简单的方法可以创建此PendingIntent来执行一段代码?
提前致谢,
答案 0 :(得分:4)
我不想启动服务,活动或广播任何内容......
然后你不能使用ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates()
。
是否只有一种简单的方法可以创建此PendingIntent来执行一段代码?
没有
此API的常规用例是了解一段时间内设备状态的变化,并且您的过程可能无法在这些状态变化之间运行。因此,他们针对传统用例优化了此API,需要PendingIntent
,以便他们可以让您的应用再次运行,以告诉您状态更改。
如果您恰好使用此API来查找状态更改,只有当您的一个魔术活动恰好位于前台时,您可以对该活动使用createPendingResult()
来获取PendingIntent
这将在同一活动上调用onActivityResult()
。但是,这是一个相当小的场景,特别是对于这个API。
否则,您需要对此进行处理,与使用AlarmManager
或JobScheduler
作业安排警报的方式相同:
如果您正在进行的工作将花费不到1毫秒,请创建一个清单注册的BroadcastReceiver
并使用getReceiver()
PendingIntent
如果您正在进行的工作需要1毫秒到15秒,请创建IntentService
并使用getService()
PendingIntent
如果您正在进行的工作可能需要超过15秒,请创建清单注册的WakefulBroadcastReceiver
和 IntentService
,使用{{ 1}} getReceiver()
,让PendingIntent
通过WakefulBroadcastReceiver
将作品传递给IntentService
。