我想阻止用戶更改wifi,gps和從我的應用程序加載設置。用戶不需要在運行我的應用程序時打開/關閉wifi和gps(從通知欄)。是否有任何BroadcastReceiver存在用於偵聽gps開/關?如何檢測用戶打開/關閉GPS狀態?
在此先感謝
我想阻止用戶更改wifi,gps和從我的應用程序加載設置。用戶不需要在運行我的應用程序時打開/關閉wifi和gps(從通知欄)。是否有任何BroadcastReceiver存在用於偵聽gps開/關?如何檢測用戶打開/關閉GPS狀態?
在此先感謝
這是不可能的。你無法控制/限制你心血來潮的硬件狀態。這在API中是很危險的,因此不存在這樣的API。
我想使GPS狀態改變爲之前的狀態,無論用戶何時改變它。我需要像broadcastreceiver這樣的東西來監聽android.net.conn.CONNECTIVITY_CHANGE –
然後重構你的問題,因爲那不是你要求的。你問**限制**改變不聽。 – JoxTraex
您可以通過以下方式檢測GPS的狀態。
看看GpsStatus.Listener。使用locationManager.addGpsStatusListener(gpsStatusListener)註冊它。
也請查看此SO link以獲得更好的理解。
您可以使用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」類中)。
因此,從Nougat開始,addGpsStatusListener已在API級別24中棄用。請根據Android文檔[here](https)使用registerGnssStatusCallback(GnssStatus.Callback) ://developer.android.com/reference/android/location/LocationManager.html#addGpsStatusListener(android.location.GpsStatus.Listener)) – sud007
不能使用GpsStatus.Listener做到這一點。您必須使用廣播接收器。使用LocationManager.PROVIDERS_CHANGE_ACTION。不使用Intent.ACTION_PROVIDER_CHANE。 祝你好運!
從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
嗯,我做了很多挖掘和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
中取消註冊將不起作用,因爲您的活動轉到並且停止了片段。
那麼這個解決方案可能有很多答案,但這個很容易管理和使用 。
只有當你希望你的用戶恨你時才這樣做。 –
@BurhanKhalid不一定。現在我將這作爲一項業務需求。 – Chisko