2016-07-30 4 views
1

Я использую класс ящериц местоположения для получения обновлений местоположения. Мое требование таково, что я должен слушать скорые обновления местоположения, но проблема, с которой я столкнулся, когда он отключается, я не знаю, как чтобы reatablish подключение GPS, кроме того, в какое-то устройство, как только устройство спит им не в состоянии получать данные о местонахождении просьба сообщить какие-либо решения для достижения этой цели любая помощь приветствуется ..обновления местоположения запроса не работают во время сна устройства

public void setup(MainActivity activity) { 
     if (!setup) { 
      this.activity = activity; 
      Intent locationIntent = new Intent(this.activity, LocationIntentService.class); 
      mLocationPendingIntent = PendingIntent.getService(this.activity, 0, locationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      Intent detectedIntent = new Intent(this.activity, ActivityDetectionIntentService.class); 
      mDetectedActivityPendingIntent = PendingIntent.getService(this.activity, 0, detectedIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      googleApiClient = new GoogleApiClient.Builder(activity) 
        .addConnectionCallbacks(activity) 
        .addOnConnectionFailedListener(activity) 
        .addApi(ActivityRecognition.API) 
        .build(); 
      setup = true; 
     } 
    } 
**LocationIntentService.java** 
public class LocationIntentService extends IntentService { 


    public LocationIntentService() { 
     super("LocationServices"); 
    } 

    public LocationIntentService(String name) { 
     super("LocationServices"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     if (intent != null) { 
      Location location = intent.getParcelableExtra(LocationManager.KEY_LOCATION_CHANGED); 
      if (location != null) { 
       Intent localIntent = new Intent(HWUtil.LOCAL_RECEIVER); 
       localIntent.addCategory(Intent.CATEGORY_DEFAULT); 
       localIntent.putExtra(HWUtil.LOCATION, location); 
       localIntent.putExtra(HWUtil.FROM, HWUtil.LOCATION_SERVICE); 
       sendBroadcast(localIntent); 
      } 
     } 
    } 

} 

и им посылать эти обновления местоположения для Broadcastrecciver

+0

Я столкнулся с проблемой dame –

+0

Вы должны реализовать менеджера местоположений в фоновом режиме, о котором я думаю. Если вы привяжете его к действию, это не сработает, поскольку вы остановите обновление местоположения при остановке активности. – HendraWD

ответ

2

Обратите внимание, что непрерывное использование чистого GPS в качестве местоположения провайдер довольно энергичен на мобильных устройствах. После того, что сказано, я бы выполнить свою задачу следующим образом:

  1. Я хотел бы использовать (фон) service, который будет работать с вашим совмещен мобильным приложением. Например, мобильное приложение начнет выполнение этой службы (проверьте функциональность startForeground(), чтобы ваша служба могла работать почти без перерывов и включая уведомление о статусеBar, которое может быть связано с вашей деятельностью).
  2. Служба (или любой внутренний класс) будет реализовывать интерфейс LocationListener и будет тем, который фактически будет местом выборки. После того, как вы получите местоположение, вы его обработаете (в зависимости от ваших требований вы можете обработать его в другом потоке, поскольку поток по умолчанию созданной службы совпадает с пользовательским интерфейсом Activity).
  3. После обработки вы получите ответ на активность Android, то есть вы бы назвали общедоступный метод своей деятельности или выполнили бы более сложную стратегию связи с обработчиками и т. Д.
  4. Что касается непрерывного местоположения выборки, я настоятельно рекомендую вам использовать службы AlarmManager, чтобы вы могли планировать следующие показания (вы могли бы сделать это с точными повторяющимися интервалами, см. official developer's documentation).
  5. Если (и только если) обработка обновления местоположения является тяжелой или требует много времени (например, вы должны передать ее на сервер), вы можете приобрести и удержать WakeLock, чтобы не допустить перехода устройства в спящий режим; не забывайте выпустить WakeLock после того, как ваша обработка будет завершена, поскольку это основная причина поглотителей энергии в мобильных приложениях, поэтому будьте очень осторожны с этим.

Надеется, что это помогает для вас

0

AFAIK, wake lock это самый простой способ сделать. PowerManager.WakeLock

Блокировка от будильника - это механизм, указывающий, что ваше приложение должно содержать устройство.

Любое приложение, использующее WakeLock, должно запросить разрешение android.permission.WAKE_LOCK в элементе манифеста приложения. Получите блокировку бодрствования, позвонив по номеру newWakeLock(int, String).

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

Вы должны aquire замок бодрствование:

//in onCreate of your service 
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
cpuWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
"gps_service"); 
cpuWakeLock.acquire(); 

// Release in onDestroy of your service 
if (cpuWakeLock.isHeld()) 
cpuWakeLock.release(); 
and add this to your manifest: 

https://developer.android.com/reference/android/Manifest.permission.html Выше хорошо, если вам необходимо непрерывное обновление местоположения.

+0

@d. datul1990 он не будет нагревать устройство? –

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