我希望在用户启用或禁用网络或 GPS 位置时收到通知,重要的是我希望知道他们更改了哪个以及如何更改。我有一个用于android.location.PROVIDERS_CHANGED
广播意图的广播接收器,它正在接收正确的广播。
我现在需要尝试确定发生了哪些操作,即启用或禁用以及更改了哪个提供程序。我知道我可以保留每个提供者的状态,然后当我收到他们已更改的通知时,我可以弄清楚发生了什么变化,我正在寻找一种更“标准”的方法来执行此操作。广播意图似乎没有任何额外内容来指示哪个提供者已更改。
这是我目前拥有的代码。
public class LocationProviderChangedReceiver extends BroadcastReceiver {
private final static String TAG = "LocationProviderChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches("android.location.PROVIDERS_CHANGED"))
{
Log.i(TAG,"Location Providers changed");
Bundle bundle = intent.getExtras();
if (bundle == null) {
Log.d(TAG, "No extras data");
} else {
Log.d(TAG, "Bundle received of size " + bundle.size);
}
}
}
}
这是我的清单中的一小部分摘录
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<receiver
android:name=".LocationProviderChangedReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
如果广播中有一个额外的说明哪个提供者已更改以及它是启用还是禁用,这将是完美的。不幸的是,这种情况并非如此。有谁知道我可以在不维护自己的状态变量的情况下确定哪些状态发生了变化的任何机制。
在一个理想的世界里,我会不断地监控变化,但只是偶尔监听位置变化。我想避免不断监控位置变化。