我有一个广播接收器,它将启动一个活动onReceive。
启动时,此活动将执行一项长任务,并在结束时调用finish()。
当前一个Activity仍在执行长任务时,我不想触发另一个Activity的启动。我怎样才能发起单一活动?我在清单中设置了这个。
android:launchMode="singleTask"
在我的onReceive方法中,
public void onReceive(Context context, Intent intent) {
Intent activity = new Intent(context, Preview.class);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activity);
}
似乎没有用。
Activity类实际上是一个MediaRecorder,它将记录一个视频片段(例如10秒)。因此,我不想在此录音仍然不完整的情况下触发另一个活动。
答案 0 :(得分:0)
您只需要有一些方法让您的活动与您的接收者沟通,让它知道它是否已经在运行。如果你有,那么你可以在接收器中创建一个if语句,使其不会启动倍数。
一个选项是活动中的静态布尔值,表示您当前是否正在运行。然后你可以检查接收器中的布尔值,如果是,则不要调用startActivity()。
你的活动需要这样的东西:
public YourActivity extends Activity{
public static isRunning = false;
public void onStart(){
...
isRunning = true;
}
public void onStop(){
...
isRunning = false;
}
}
现在在你的接收器中你可以创建一个简单的if语句来检查isRunning的值:
public void onReceive(Context context, Intent intent) {
if(YourActivity.isRunning == false){
Intent activity = new Intent(context, Preview.class);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activity);
}
}
答案 1 :(得分:0)
请添加这些标志。
public void onReceive(Context context, Intent intent) {
Intent activity = new Intent(context, Preview.class);
activity.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
context.startActivity(activity);
}