2015-06-20 66 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()

相關問題