gpt4 book ai didi

android - 带有 singleTop 的广播接收器 startActivity

转载 作者:太空狗 更新时间:2023-10-29 15:00:49 27 4
gpt4 key购买 nike

我使用订阅了 android.location.PROVIDERS_CHANGED 的广播接收器收听 GPS 激活或 GPS 停用。

当 GPS 停用时,我想打印一个弹出窗口。为此,我使用以下代码:

public class GPSReceiver extends BroadcastReceiver {

public GPSReceiver() {
}

@Override
public void onReceive(Context context, Intent intent) {
final LocationManager manager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);

boolean gps = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean network = manager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

if (!gps || !network) {

Intent popup = new Intent(context,
ModalActivity.class);
popup.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(popup);
}
}

我的弹出窗口打印正常。但我有 2 个弹出窗口。事实上,当我切断 GPS 时,我的 OnReceive 被调用了 2 次:针对网络和 GPS。

如何只打印一个弹出窗口?

我尝试了很多解决方案:

1) 我尝试使用 Intent.FLAG_ACTIVITY_SINGLE_TOP 开始我的 Activity ,但出现此错误:

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

2) 我尝试使用 NEW_TASK 和 SINGLE_TOP 标志调用我的 Activity ,但我有 2 个弹出窗口:

popup.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
popup.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

3) 我尝试添加一个公共(public)静态 bool 值来了解我的 Activity 是否已启动,但我的 onReceive 似乎同时被调用。所以我的 bool 值在 onReceive 调用后被修改。

你有什么建议吗?

谢谢

最佳答案

以下设置对我有用。

在 list 中将 Activity 设置为 singleTask:

android:launchMode="singleTask"

然后用这些标志调用它:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

关于android - 带有 singleTop 的广播接收器 startActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021656/

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