Android - Broadcast Receiver запускает синглетную задачу - PullRequest
0 голосов
/ 26 января 2012

У меня есть широковещательный приемник, который запускает Activity onReceive.

При запуске это действие выполнит длинную задачу и в конце вызовет завершение ().

Я не хочу запускать другое действие, когда предыдущее действие все еще выполняет длинную задачу. Как я могу запустить только одно задание? Я установил это в манифесте.

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 голосов
/ 26 января 2012

Пожалуйста, добавьте эти флаги.

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);
}
0 голосов
/ 26 января 2012

Вам просто нужно, чтобы ваша активность сообщала получателю, чтобы он знал, запущен он или нет.Если у вас есть это, вы можете сделать в операторе оператор 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);
    }
}
...