Android - Broadcast Receiver发布了一个singletask Activity

时间:2012-01-26 14:02:25

标签: android android-activity launch

我有一个广播接收器,它将启动一个活动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秒)。因此,我不想在此录音仍然不完整的情况下触发另一个活动。

2 个答案:

答案 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);
}