使用/创建 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