我正在尝试注册一个广播接收器,以便在gps状态更改时接收更新。
但是,当gps状态从启用更改为禁用时,我的GpsChangeReceiver onReceive方法似乎不会被调用,反之亦然。
首先,我要注册接收器:
GpsChangeReceiver m_gpsChangeReceiver = new GpsChangeReceiver();
this.registerReceiver(m_gpsChangeReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
然后,我有了我的GPS接收器
public class GpsChangeReceiver extends BroadcastReceiver
{
@Override
public void onReceive( Context context, Intent intent )
{
final LocationManager manager = (LocationManager) context.getSystemService( Context.LOCATION_SERVICE );
if (manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
//do something
}
else
{
//do something else
}
}
}
最后,我的清单包含:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
当我从手机的设置中修改gps接收器的状态时,有没有人知道为什么从来没有调用过??
发布于 2013-10-21 23:04:19
在Android中有两种注册广播接收器的方式:
代码中的
中的
让我来解释一下不同之处。
情况1(在代码中注册的广播接收器)
只要您注册接收器的context是alive,您就会收到广播。因此,当activity或应用程序被killed (取决于您注册接收器的位置)时,您的将不再接收广播。
我猜您在activity context中注册了broadcast receiver,这不是很好的方法。如果您想为您的应用程序上下文注册broadcast receiver,您可以这样做:
getApplicationContext().registerReceiver(m_gpsChangeReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
情况2(在AndroidManifest.xml中注册的广播接收器)
你的会收到广播,即使你的应用程序被(系统会唤醒你的应用程序)。当你想接收广播而不管你的应用是运行的时,这是正确的方法。
将此接收器添加到您的AndroidManifest.xml:
<receiver android:name="com.yourpackage.NameOfYourBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
编辑:一些特殊的广播(即SCREEN_ON或SCREEN_OFF)必须在代码中注册(情况1),否则它们不会被传递到您的应用程序。
https://stackoverflow.com/questions/12665558
复制相似问题