2015-06-20 3 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 для выполнения только блока кода?

No.

Традиционный способ использования этого API, чтобы узнать об изменениях в состоянии устройства в течение определенного периода времени, и ваш процесс не может быть запущен между этими изменениями состояния. Следовательно, они оптимизировали этот API для обычного использования, требуя PendingIntent, чтобы они могли снова запустить ваше приложение, чтобы сообщить вам об изменении состояния.

Если вам случится использовать этот API, чтобы узнать о изменении состояния только в то время как одна магическая деятельность твое случается на переднем плане, вы можете использовать createPendingResult() на эту деятельность, чтобы получить PendingIntent, который будет вызывать onActivityResult() на том же Мероприятия. Однако это довольно нишевый сценарий, особенно для этого API.

В противном случае, вам нужно не лечить это не иначе, чем если бы вы были планирования тревоги с AlarmManager или работу с JobScheduler:

  • Если работа, которую вы делаете, будет занимать менее 1 миллисекунды, создать манифеста зарегистрированных BroadcastReceiver и использовать getReceiver()PendingIntent

  • Если работа, которую вы делаете, будет принимать от 1 миллисекунды и 15 секунд, создать IntentService и использовать getService()PendingIntent

  • Если работа, которую вы делаете, может занять свыше 15 секунд, создать манифест зарегистрированных WakefulBroadcastReceiverи в IntentService, используйте getReceiver()PendingIntent, и имеют WakefulBroadcastReceiver передать работу в IntentService через startWakefulService() ,

Смежные вопросы