2015-06-20 26 views
1

也许有一些非常简单,我没有看到。我试图从一些API调用一个方法,并且这个方法要求一个PendingIntent异步地给我发送一些值。我已经阅读了半小时的文档和示例,并且无法用简单的方式来包装我的头。最简单的方式使用/创建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来执行一段代码?

由于提前,

回答

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秒的工作,创建一个清单登记WakefulBroadcastReceiverIntentService,使用getReceiver()PendingIntent,并有WakefulBroadcastReceiver工作传递给IntentService通过startWakefulService()

相关问题