2013-04-03 94 views
12

我想阻止用戶更改wifi,gps和從我的應用程序加載設置。用戶不需要在運行我的應用程序時打開/關閉wifi和gps(從通知欄)。是否有任何BroadcastReceiver存在用於偵聽gps開/關?如何檢測用戶打開/關閉GPS狀態?

在此先感謝

+11

只有當你希望你的用戶恨你時才這樣做。 –

+0

@BurhanKhalid不一定。現在我將這作爲一項業務需求。 – Chisko

回答

3

這是不可能的。你無法控制/限制你心血來潮的硬件狀態。這在API中是很危險的,因此不存在這樣的API。

+1

我想使GPS狀態改變爲之前的狀態,無論用戶何時改變它。我需要像broadcastreceiver這樣的東西來監聽android.net.conn.CONNECTIVITY_CHANGE –

+2

然後重構你的問題,因爲那不是你要求的。你問**限制**改變不聽。 – JoxTraex

2

您可以註冊BroadcastReceiver以收聽意向操作PROVIDERS_CHANGED_ACTION。這將在配置的位置提供程序更改時廣播。你可以參考這個link

+0

它適用於所有Android版本 –

+1

它可以從API級別9工作 – Aju

1

您可以通過以下方式檢測GPS的狀態。

看看GpsStatus.Listener。使用locationManager.addGpsStatusListener(gpsStatusListener)註冊它。

也請查看此SO link以獲得更好的理解。

17

您可以使用GpsStatus.Listener 收聽GPS狀態,並將其註冊到LocationManager。

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
lm.addGpsStatusListener(new android.location.GpsStatus.Listener() 
{ 
    public void onGpsStatusChanged(int event) 
    { 
     switch(event) 
     { 
     case GPS_EVENT_STARTED: 
      // do your tasks 
      break; 
     case GPS_EVENT_STOPPED: 
      // do your tasks 
      break; 
     } 
    } 
}); 

您需要訪問上下文(例如在「Activity」或「Application」類中)。

+4

因此,從Nougat開始,addGpsStatusListener已在API級別24中棄用。請根據Android文檔[here](https)使用registerGnssStatusCallback(GnssStatus.Callback) ://developer.android.com/reference/android/location/LocationManager.html#addGpsStatusListener(android.location.GpsStatus.Listener)) – sud007

-1

不能使用GpsStatus.Listener做到這一點。您必須使用廣播接收器。使用LocationManager.PROVIDERS_CHANGE_ACTION。不使用Intent.ACTION_PROVIDER_CHANE。 祝你好運!

0

從API 19日起,您可以收聽意圖動作LocationManager.MODE_CHANGED_ACTION註冊一個BroadcastReceiver

參考:https://developer.android.com/reference/android/location/LocationManager.html#MODE_CHANGED_ACTION

你可以得到的位置模式

try 
{ 
    int locationMode = android.provider.Settings.Secure.getInt(context.getContentResolver(), android.provider.Settings.Secure.LOCATION_MODE); 
} catch (android.provider.Settings.SettingNotFoundException e) 
{ 
    e.printStackTrace(); 
} 

返回的值應該是一個其中:

android.provider.Settings.Secure.LOCATION_MODE_BATTERY_SAVING 
android.provider.Settings.Secure.LOCATION_MODE_HIGH_ACCURACY 
android.provider.Settings.Secure.LOCATION_MODE_OFF 
android.provider.Settings.Secure.LOCATION_MODE_SENSORS_ONLY 
12

嗯,我做了很多挖掘和addGpsStatusListener(gpsStatusListener)已在API 24中棄用。對我來說,這甚至沒有工作。這是另一種選擇。

如果你想在你的應用中聽GPS狀態變化(我的意思是用戶開/關)廣播是最好的方法。

實現:

/** 
* Following broadcast receiver is to listen the Location button toggle state in Android. 
*/ 
private BroadcastReceiver mGpsSwitchStateReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) { 
      // Make an action or refresh an already managed state. 
     } 
    } 
}; 

不要忘了註冊和註銷這有效地片段/活動的生命週期爲好。

registerReceiver(mGpsSwitchStateReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION)); 

例如,如果您使用的是一個片段,登記onResume和註銷在onDestroy如果你正在服用用戶的設置,使位開關。在onStop中取消註冊將不起作用,因爲您的活動轉到並且停止了片段。

那麼這個解決方案可能有很多答案,但這個很容易管理和使用 。

相關問題