使用singleTop广播接收器startActivity

时间:2014-11-19 16:15:58

标签: android gps broadcastreceiver

我通过广播接收器订阅GPS激活或GPS停用订阅 android.location.PROVIDERS_CHANGED

当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上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

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

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

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

你有什么建议吗?

由于

1 个答案:

答案 0 :(得分:0)

以下设置对我有用。

在清单中将活动设置为singleTask:

android:launchMode="singleTask"

然后用这些标志调用它:

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