Android: detect when GPS is turned on/off (or when no app is using it anymore)

佐手、 提交于 2019-12-03 10:18:02
theWook

On API level 9 and higher you can use LocationManager.PROVIDERS_CHANGED_ACTION:

Broadcast intent action when the configured location providers change. For use with isProviderEnabled(String). If you're interacting with the LOCATION_MODE API, use MODE_CHANGED_ACTION instead.

Constant Value: "android.location.PROVIDERS_CHANGED"

Source

The following solution might be a weird solution but you can try it if you don't find any solution. Another problem with your solution is it works only after api level 9.

in a thread or service you can check the gps status periodically with a very short interval by using

 LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
 boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

it will use the permission

android.permission.ACCESS_FINE_LOCATION

Even though I am answering this, to me it should not be a good solution. Also there is a chance of minimum period interval delay. Just an option.

ARLabs

Starting from API 19 you can listen for the intent action LocationManager.MODE_CHANGED_ACTION.

You can also get the current location mode as follows:

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

The value returned should be one of these:

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

Use a LocationListener and override OnStatusChanged.

You can attach your listener using the requestLocationUpdates(String, long, float, LocationListener) method on your LocationManager instance.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!