GPS-отслеживание Android и WakeLock - PullRequest
       9

GPS-отслеживание Android и WakeLock

5 голосов
/ 14 октября 2011

Мне нужно выполнить фоновое GPS-отслеживание на телефоне Android, и в настоящее время я планирую использовать два сценария:

  1. Когда телефон подключен к (автомобильному) зарядному устройству, часто пользуйтесь GPSместоположения (каждую минуту).
  2. Если телефон не подключен к зарядному устройству, проводите опрос местоположения только каждые 5-30 минут, в зависимости от степени воздействия на батарею.

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

Для этих сценариев , что является наилучшим способом непрерывного фонового GPS-отслеживания безтелефон собирается спать, и не потребляя слишком много энергии?

Пока я собрал следующее:

Для сценария 1 мне, вероятно, понадобится приобрести WakeLock и сохранитьпроцессор не спит все время (но экран может спать).Приложение MyTracks, кажется, делает это в TrackRecordingService .OpenGPSTracking, кажется, делает то же самое .

Для сценария 2 я могу использовать AlarmManager для планирования проверки каждые х минут.Моему сервису потребуется приобрести временный WakeLock, дождаться одного местоположения GPS, затем остановить и снова разблокировать WakeLock.

Как будет сравниваться энергопотребление для этих двух методов (постоянный WakeLock против AlarmManager)?Может ли GPS получать точное местоположение в разумные сроки при проверке только каждые 30 минут?

Есть несколько связанных вопросов о StackOverflow, но ни один из них не дает удовлетворительных ответов.Некоторые полу-полезные:

Ответы [ 2 ]

6 голосов
/ 14 октября 2011

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

Для подключенного питания:

public class PowerConnected extends BroadcastReceiver{
   @Override
   public void onReceive(Context context, Intent intent) {
   // TODO Auto-generated method stub
   if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_CONNECTED")){
      //Initialize your listener here...
   }
   }

}

В файле манифеста:

<receiver android:name=".receiver.PowerConnected" >
<intent-filter >
     <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>

Когда питание отключено:

public class PowerDisconnected extends BroadcastReceiver{
  @Override
  public void onReceive(Context context, Intent intent) {
  if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_DISCONNECTED")){
    //Do your task here...      
  }
 }
}

В вашем файле манифеста:

<receiver android:name=".receiver.PowerDisconnected" >
<intent-filter >
   <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>

Теперь вы должны использовать service и инициализируйте свой GPS там.Когда питание подключено, используйте GPS_Provider, в противном случае используйте network provider. Используйте wakelock, если необходимо.

5 голосов
/ 14 октября 2011
  1. Когда телефон подключен к зарядному устройству и вы можете активировать функцию будильника, так как планируете часто посещать GPS, AlarmManager в этом случае кажется не очень хорошей идеей.

  2. Когда телефон не подключен к зарядному устройству, вы можете использовать диспетчер тревог, так как будете запрашивать местоположение только один раз каждые 5-30 минут.Приобретение wakelock существенно повлияет на срок службы батареи.

Реализация зависит от вас.

Приветствия .... !!

...