2016-04-20 5 views
3

Я создал приложение, которое всплывающее уведомление в местоположении, которое я установил. Все работает плавно. Даже после перезагрузки устройства. Нет проблем. Но я заметил, что если отключить GPS и перезагрузить устройство, BroadcastReceiver, вероятно, попытается войти в Geofence api и получит ошибку, потому что GPS отсутствует. и уведомление Geofence больше не всплывает, пока я не перезагружу свое устройство с включенным режимом gps. Должен ли я использовать AlarmManager? Для обновления некоторых обновлений каждые х раз? Чтобы убедиться, что включен режим GPS?Как зарегистрировать Geofence после перезапуска устройства?

ответ

5

Данное решение предполагает, что вы уже храните информацию о геозонности, которую хотите использовать, таким образом, чтобы она сохранялась при перезагрузке устройства.

При первом запуске в BroadcastReceiver, который обрабатывает RECEIVE_BOOT_COMPLETED, сделайте чек, чтобы узнать, есть ли GPS is enabled. Если это так, продолжайте нормально, но если нет, добавьте это в свой приемник:

@Override 
public void onReceive(Context context, Intent intent) { 

    //Or whatever action your receiver accepts 
    if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ 
     LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
     if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER){ 
      context.registerReceiver(this, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION)); 
     } 
     else{ 
      //We are good, continue with adding geofences! 
     } 
    } 

    if(intent.getAction().equals(LocationManager.PROVIDERS_CHANGED_ACTION)){ 
     if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER){ 
      context.unregisterReceiver(this); 
      //We got our GPS stuff up, add our geofences! 
     } 
    } 
} 
+0

Спасибо, я попробую – Anna

+0

It's Works! Большое спасибо – Anna

+0

Должен ли я использовать: «context.registerReceiver (это новый IntentFilter (LocationManager.PROVIDERS_CHANGED_ACTION)); Или mContext.unregisterReceiver (this)? – Anna

2

Вы можете добавить это в свой манифест. В этом примере предполагается, что у вас есть BroadcastReceiver com.example.MyBroadcastReceiver, замените его на свой. Этот приемник будет получать трансляцию при каждом включении или выключении GPS.

<receiver android:name="com.example.MyBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="android.location.PROVIDERS_CHANGED" /> 
    </intent-filter> 
</receiver> 
+0

Спасибо, я попробую – Anna

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

  • Нет связанных вопросов^_^