2013-04-11 3 views
2

У меня есть служба, которая выполняет прослушивание местоположения. Теперь мой вопрос заключается в том, как убедиться, что моя служба захватит местоположение даже в спящем режиме. Я прочитал о диспетчере аварийных сообщенийКак сделать сервис даже в спящем режиме?

alarm.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, operation); 

но как его использовать. Вот мой код .. любая помощь будет оценена ..
моя служба

public class LocationCaptureService extends Service implements LocationListener { 
public static int inteval; 
java.sql.Timestamp createdTime; 
LocationManager LocationMngr; 

@Override 
public void onCreate() { 
    inteval=10*1000; 

    startLocationListener(inteval); 
} 

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

private void startLocationListener(int inteval,String nwProvider) { 
    this.LocationMngr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);   
     this.LocationMngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, inteval, 0, this); 
} 

public void onLocationChanged(Location location) { 
    String status="c",S=null; 
    double longitude,lattitude,altitude; 
    g_currentBestLocation = location; 
    createdTime = new Timestamp (new java.util.Date().getTime());  
     longitude=location.getLongitude(); 
     lattitude=location.getLatitude(); 
     altitude=location.getAltitude(); 
     //use this 
     } 
    }        
    public void onProviderDisabled(String provider) {}        
    public void onProviderEnabled(String provider) {}        
    public void onStatusChanged(String provider, int status, Bundle extras) {} 

}

+0

Я не думаю, что вы хотите использовать 'AlarmManager', если вам не нужно планировать определенные интервалы для запроса местоположения. Если вы хотите, чтобы ваш сервис не был убит до тех пор, пока а) ваше приложение не будет выполнено b) пользователь сообщит, что ваше приложение остановится, вам нужен другой подход. –

+0

thanx для комментария .. может у, пожалуйста, скажите мне, как сделать сервис не убитым, пока мое приложение не будет выполнено. мне нужно вернуть start_sticky – 2013-04-11 07:18:40

ответ

3

Если вы хотите, чтобы убедиться, что сервис не убили/утилизирован ОС вы должны сделать его переднего плана. По умолчанию все службы являются фоновыми, то есть они будут убиты, когда ОС потребует ресурсов. Подробнее см. Здесь doc

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

Вот простой пример того, как создать уведомление (сделать это в вашей службе) и сделать его на передний план:

Intent intent = new Intent(this, typeof(SomeActivityInYourApp)); 
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 

builder.setSmallIcon(Resource.Drawable.my_icon); 
builder.setTicker("App info string"); 
builder.setContentIntent(pi); 
builder.setOngoing(true); 
builder.setOnlyAlertOnce(true); 

Notification notification = builder.build(); 

// optionally set a custom view 

startForeground(SERVICE_NOTIFICATION_ID, notification); 

Пожалуйста, обратите внимание, что приведенный выше пример является рудиментарным и не содержит код, чтобы отменить уведомление, среди прочего. Кроме того, когда ваше приложение больше не нуждается в услуге, оно должно позвонить stopForeground, чтобы удалить уведомление и разрешить убивать службу, а не тратить ресурсы.

+0

Я пробовал этот подход на Huawei U8860, и служба не работает, пока устройство находится в спящем режиме (экран выключен и устройство заблокировано). и эта проблема существует только с этим Huawei U8860, я пробовал его на HTC ONE X, S3, Experia T, S2, ... и он работает. Любые идеи о том, почему это не работает с этим устройством? спасибо – Houcine

+0

Год спустя, и я отвечаю на этот комментарий, лучше поздно, чем никогда. Возможно, вам понадобится провести WakeLock, чтобы ваша служба продолжала работать. Для получения дополнительной информации см. Https://developer.android.com/reference/android/os/PowerManager.WakeLock.html. –

+1

год и день: D. – Houcine

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