2016-02-28 4 views
-1

Я хочу создать приложение, в котором изменяется режим моего аудио профиля в соответствии с местоположением. Для этого мне всегда нужно проверять местоположение в фоновом режиме. Как я могу сделать это в фоновом режиме? Где поправить мой фактический код получения и сравнения места в классе Service и когда начать мой класс обслуживания?Хотите узнать о классе обслуживания в Android

+0

Используйте IntentService и установите PendingIntent по истечении определенного периода времени. Затем вы можете запросить обновления местоположения, как в действии, получить широту и долготу и сохранить их в SharedPreferences. Затем зайдите в SharedPreferences из своей активности и сделайте все, что хотите. –

+0

Как я могу установить pendingIntent? –

+0

И если я использую IntentService, то поведение класса Service прекратится после завершения заданной задачи. Я хочу проверить местоположение, не останавливая Сервис –

ответ

0

Ниже приведен пример IntentService, который перезапускается каждые 5 минут.

public class MyIntentService extends IntentService { 

    int updateVal; 

    public MyIntentService() { 
     super("MyIntentService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

    // your code here. Request location updates here. 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onDestroy() { 

     //minutes after which the service should restart 
     updateVal = 5; 

     AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE); 

     //This is to incorporate Doze Mode compatibility on Android M and above. 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
      alarm.setAndAllowWhileIdle(
        alarm.RTC_WAKEUP, 
        System.currentTimeMillis() + (1000 * 60 * updateVal), 
        PendingIntent.getService(this, 0, new Intent(this, MyIntentService.class), 0) 
      ); 

     //For all other versions. 
     else 
      alarm.set(
        alarm.RTC_WAKEUP, 
        System.currentTimeMillis() + (1000 * 60 * updateVal), 
        PendingIntent.getService(this, 0, new Intent(this, MyIntentService.class), 0) 
      ); 
    } 
} 

В вашей основной деятельности, введите этот код, чтобы начать обслуживание.

startService(new Intent(this, MyIntentService.class)); 

Вам необходимо реализовать LocationListener и получить обновления местоположения, которые я еще не добавил в код.

Если вы действительно хотите запустить службу, которая никогда не останавливается, вам необходимо расширить класс обслуживания вместо класса IntentService. Это очень хорошо объяснено в руководстве Android Developers: http://developer.android.com/guide/components/services.html

+0

Спасибо, например, ... :-) –

+0

Спасибо, это работает для меня ... –

0

Используйте сервис, возвращающий функцию «START_STICKY» в функции onStartCommand(). Ваш сервис будет перезапущен после того, как он был убит системой. Однако иногда он не перезапускается. Чтобы сделать ваш сервис на 100% живым, используйте функцию переднего плана. В любом случае для обслуживания переднего плана требуется всегда отображаемое уведомление.

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