gpt4 book ai didi

android - Gps 状态启用/禁用广播接收器

转载 作者:IT老高 更新时间:2023-10-28 23:23:21 24 4
gpt4 key购买 nike

我正在尝试注册一个广播接收器,以便在 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
}
}
}

最后,我的 list 包含:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

任何人都可以看到为什么当我从手机设置中修改 GPS 接收器的状态时,它永远不会被调用??

最佳答案

在 Android 中注册广播接收器有两种方式:

  1. 在代码中(您的情况)
  2. 在 AndroidManifest.xml 中

让我解释一下不同之处。

案例1(代码中注册的广播接收器)

只有在您注册接收器的上下文 Activity 时,您才会收到广播。所以当 activityapplicationkilled (取决于你在哪里注册你的接收器)不会不再接收广播。

我猜你在 activity context 中注册了广播接收器,这不是很好的方法。如果您想为您的应用程序上下文注册广播接收器,您可以执行以下操作:

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),否则它们将不会传送到您的应用程序。

关于android - Gps 状态启用/禁用广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12665558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com