我在Android 2.3.7上,我正在尝试编写一个BroadcastReceiver,当用户打开/关闭GPS时会调用它(即:通过点击选项中的“使用GPS卫星”。
到目前为止,我所做的是:
1)创建了以下broadcastReceiver:
public class GPSStatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(arg0, "Broadcast received!", Toast.LENGTH_SHORT).show();
}
}
2)将其添加到标签内的android清单中:
<receiver android:name=".GPSStatusBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
现在问题在于它似乎不可靠。当我打开GPS / ff时onReceive()方法有时只运行(我会说1次超时3),其他时候它不会被调用。
我想知道是否有可靠的方法来检测GPS何时关闭/打开。
如果不存在,至少在没有应用程序使用GPS时会收到通知会很高兴(例如:当gps图标从状态栏中消失时,表示没有人正在主动定位)。
编辑:澄清:我的应用程序运行时我不想这样做。我只是在我的应用程序启动时打开/关闭gps,做它的事情然后终止,我不想订阅LocationsUpdates ......
答案 0 :(得分:9)
在API级别9及更高级别,您可以使用LocationManager.PROVIDERS_CHANGED_ACTION
:
配置的位置提供程序更改时的广播意图操作。用于
isProviderEnabled(String)
。如果您要与LOCATION_MODE API
互动,请改用MODE_CHANGED_ACTION
。常量值:“android.location.PROVIDERS_CHANGED”
答案 1 :(得分:3)
以下解决方案可能是一个奇怪的解决方案,但如果您找不到任何解决方案,可以尝试使用它。您的解决方案的另一个问题是它仅在api级别9之后才有效。
在线程或服务中,您可以使用
定期检查gps状态,间隔很短 LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
它将使用权限
android.permission.ACCESS_FINE_LOCATION
即使我在回答这个问题,但对我来说这不应该是一个好的解决方案。还有可能存在最小周期间隔延迟。只是一个选择。
答案 2 :(得分:2)
从API 19开始,您可以侦听意图操作LocationManager.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
答案 3 :(得分:-3)
使用LocationListener
并覆盖OnStatusChanged
。
您可以使用requestLocationUpdates(String, long, float, LocationListener)
实例上的LocationManager
方法附加您的听众。