我正在尝试注册广播接收器,以便在更改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接收器?
答案 0 :(得分:16)
在Android中注册广播接收器有两种方式:
让我解释一下差异。
只有上下文您注册接收器活着时才会收到广播。 因此,当活动或应用 被杀 (取决于您注册接收者的位置)时,将不会接收广播。
我猜您在活动背景中注册了广播接收器,这不是很好的方法。 如果您想为应用程序上下文注册广播接收器,您可以执行以下操作:
getApplicationContext().registerReceiver(m_gpsChangeReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
即使您的应用程序已杀死 (系统将唤醒您的应用程序),您也会收到广播。如果您希望接收广播 >>,如果您的应用正在运行,这是正确的方法。
将此接收器添加到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)中注册,否则它们将无法发送到您的应用程序。