gpt4 book ai didi

Android:如何从 LocationManager 发送的 KEY_STATUS_CHANGED 广播 Intent 中找出位置提供者名称?

转载 作者:行者123 更新时间:2023-11-30 04:51:23 24 4
gpt4 key购买 nike

我尝试同时使用 NETWORK 和 GPS 位置提供商。在主要 Activity 中,我为每个可用的提供者注册位置更新请求:

        for (String provider : m_lm.getProviders(false)) {
Intent intent = new Intent(GpsMain.this, GpsTestReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(GpsMain.this,0, intent, 0);

m_lm.requestLocationUpdates(provider, 60000, 10, pi);
}

在我的 BroadcastReceiver (GpsTestReceiver) 中进行传入 Intent 处理:

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle ex = intent.getExtras();
if (ex.containsKey(LocationManager.KEY_STATUS_CHANGED)) {
int status = (Integer)ex.get(LocationManager.KEY_STATUS_CHANGED);
String str_status;
switch (status) {
case 1:
str_status = "TEMPORARILY_UNAVAILABLE";
break;
case 2:
str_status = "AVAILABLE";
break;
default:
str_status = "OUT_OF_SERVICE";
break;
}
String provider_name = ???;
s = provider_name+": change status into "+str_status+"\n";
}

}

问题是:如何确定这个 Intent 来自哪个提供者? (字符串提供者名称 = ???;)

我尝试在注册时将 Intent 提供者名称作为有效负载包含在其中:

                intent.putExtra("local.home.gpstest.PROVIDER", provider);

但未成功:来自提供者的传入 Intent 删除我的数据...

最佳答案

我找到了解决方案。这是对 Android 如何使用 PendingIntents 的误解。确实,带有额外有效负载的解决方案正在运行,但如果之前已经对没有有效负载数据的 PendingIntents 发出了一些请求,则应用程序会收到没有有效负载数据的旧 Intent 。有必要重新加载设备或使用标志对 PendingIntent 发出新请求:

            PendingIntent pi = PendingIntent.getBroadcast(GpsMain.this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

之后传入的 Intent 将携带有关提供者名称的信息。

关于Android:如何从 LocationManager 发送的 KEY_STATUS_CHANGED 广播 Intent 中找出位置提供者名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221378/

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