Я создал приложение, которое всплывающее уведомление в местоположении, которое я установил. Все работает плавно. Даже после перезагрузки устройства. Нет проблем. Но я заметил, что если отключить GPS и перезагрузить устройство, BroadcastReceiver, вероятно, попытается войти в Geofence api и получит ошибку, потому что GPS отсутствует. и уведомление Geofence больше не всплывает, пока я не перезагружу свое устройство с включенным режимом gps. Должен ли я использовать AlarmManager? Для обновления некоторых обновлений каждые х раз? Чтобы убедиться, что включен режим GPS?Как зарегистрировать Geofence после перезапуска устройства?
ответ
Данное решение предполагает, что вы уже храните информацию о геозонности, которую хотите использовать, таким образом, чтобы она сохранялась при перезагрузке устройства.
При первом запуске в 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!
}
}
}
Вы можете добавить это в свой манифест. В этом примере предполагается, что у вас есть BroadcastReceiver com.example.MyBroadcastReceiver, замените его на свой. Этот приемник будет получать трансляцию при каждом включении или выключении GPS.
<receiver android:name="com.example.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
Спасибо, я попробую – Anna
Спасибо, я попробую – Anna
It's Works! Большое спасибо – Anna
Должен ли я использовать: «context.registerReceiver (это новый IntentFilter (LocationManager.PROVIDERS_CHANGED_ACTION)); Или mContext.unregisterReceiver (this)? – Anna