2016-04-20 86 views
3

我建立了一個應用程序,彈出通知在我設置的位置。 一切正常。即使在重新啓動我的設備後。沒有問題。但我注意到,如果我關閉GPS,然後重新啓動我的設備,BroadcastReceiver可能嘗試登錄Geofence API並因爲沒有GPS而出錯。和Geofence通知不會再彈出,直到我用gps模式重啓我的設備。 我需要使用AlarmManager嗎?爲了每x次推一些刷新?驗證GPS模式是否開啓?如何在設備重新啓動後註冊地理柵欄?

回答

5

此解決方案假設您已經存儲了您想要使用的地理圍欄信息,其方式將通過重新啓動設備來保留。

第一次啓動時,在處理RECEIVE_BOOT_COMPLETED的BroadcastReceiver中,請檢查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

它的工作原理!非常感謝您 – Anna

+0

我是否必須使用:「context.registerReceiver(this,new 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