使用/创建 PendingIntent 的最简单方法
Simplest way to use / create a PendingIntent
也许有一些我没有看到的非常简单的东西。我正在尝试从某些 API 调用方法,此方法要求 PendingIntent 异步向我发送一些值。我已经阅读了半个小时的文档和示例,但无法想出一个简单的方法来做到这一点。
更准确地说,我想调用 ActivityRecognitionApi。
为了说明,这是我如何从类似 api:
接收位置
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient,
mLocationRequest,
new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// I can do something with the location
}
});
所以我想做同样的事情来接收认可的 activity :
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleApiClient,
1000,
// ... what here ?);
那么创建 pendingIntent 以接收值的简单方法是什么?我试图创建一个匿名的 PendingIntent,但 class 是最终的。我不想启动服务,或 Activity,或广播任何内容...是否有一种简单的方法来创建此 PendingIntent 以仅执行一段代码?
提前致谢,
I don't want to start a Service, or Activity, or broadcast anything...
那你就不能用ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates()
.
Is there just a simple way to create this PendingIntent to execute just a block of code?
没有
此 API 的常规用例是了解一段时间内设备状态的变化,您的进程可能不会 运行 在这些状态变化之间。因此,他们针对常规用例优化了此 API,需要 PendingIntent
以便他们可以再次让您的应用程序 运行 告诉您有关状态更改的信息。
如果您碰巧使用这个 API 来了解状态变化,而您的一个魔法 activity 恰好在前台,您可以使用 createPendingResult()
activity 得到一个 PendingIntent
,它将在同一个 activity 上调用 onActivityResult()
。然而,这是一个相当小众的场景,特别是对于这个 API.
否则,您的处理方式与使用 AlarmManager
安排闹钟或使用 JobScheduler
:
安排工作没有区别
如果您正在做的工作将花费不到 1 毫秒,请创建清单注册 BroadcastReceiver
并使用 getReceiver()
PendingIntent
如果您正在做的工作需要 1 毫秒到 15 秒,创建一个 IntentService
并使用 getService()
PendingIntent
如果您正在做的工作可能需要超过 15 秒,请创建一个清单注册 WakefulBroadcastReceiver
和 一个 IntentService
,使用 getReceiver()
PendingIntent
,并让 WakefulBroadcastReceiver
通过 startWakefulService()
将工作传递给 IntentService
。
也许有一些我没有看到的非常简单的东西。我正在尝试从某些 API 调用方法,此方法要求 PendingIntent 异步向我发送一些值。我已经阅读了半个小时的文档和示例,但无法想出一个简单的方法来做到这一点。
更准确地说,我想调用 ActivityRecognitionApi。 为了说明,这是我如何从类似 api:
接收位置LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient,
mLocationRequest,
new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// I can do something with the location
}
});
所以我想做同样的事情来接收认可的 activity :
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleApiClient,
1000,
// ... what here ?);
那么创建 pendingIntent 以接收值的简单方法是什么?我试图创建一个匿名的 PendingIntent,但 class 是最终的。我不想启动服务,或 Activity,或广播任何内容...是否有一种简单的方法来创建此 PendingIntent 以仅执行一段代码?
提前致谢,
I don't want to start a Service, or Activity, or broadcast anything...
那你就不能用ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates()
.
Is there just a simple way to create this PendingIntent to execute just a block of code?
没有
此 API 的常规用例是了解一段时间内设备状态的变化,您的进程可能不会 运行 在这些状态变化之间。因此,他们针对常规用例优化了此 API,需要 PendingIntent
以便他们可以再次让您的应用程序 运行 告诉您有关状态更改的信息。
如果您碰巧使用这个 API 来了解状态变化,而您的一个魔法 activity 恰好在前台,您可以使用 createPendingResult()
activity 得到一个 PendingIntent
,它将在同一个 activity 上调用 onActivityResult()
。然而,这是一个相当小众的场景,特别是对于这个 API.
否则,您的处理方式与使用 AlarmManager
安排闹钟或使用 JobScheduler
:
如果您正在做的工作将花费不到 1 毫秒,请创建清单注册
BroadcastReceiver
并使用getReceiver()
PendingIntent
如果您正在做的工作需要 1 毫秒到 15 秒,创建一个
IntentService
并使用getService()
PendingIntent
如果您正在做的工作可能需要超过 15 秒,请创建一个清单注册
WakefulBroadcastReceiver
和 一个IntentService
,使用getReceiver()
PendingIntent
,并让WakefulBroadcastReceiver
通过startWakefulService()
将工作传递给IntentService
。