我通过广播接收器订阅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调用之后修改的。
你有什么建议吗?
由于
答案 0 :(得分:0)
以下设置对我有用。
在清单中将活动设置为singleTask:
android:launchMode="singleTask"
然后用这些标志调用它:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);