2012-01-26 15 views
0

私は、アクティビティonReceiveを起動する放送受信機を持っています。Android - 放送受信機がsingletaskを起動するアクティビティ

このアクティビティを起動すると、長いタスクが実行され、最後にfinish()が呼び出されます。

以前のアクティビティがまだ長いタスクを実行しているときに、別のアクティビティの起動をトリガーしたくありません。どのように私はsingletaskアクティビティだけを起動できますか?私はマニフェストにこれを設定しました。私のonReceive方法で

android:launchMode="singleTask"

public void onReceive(Context context, Intent intent) { 
    Intent activity = new Intent(context, Preview.class); 
    activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(activity); 
} 

が動作しているようですしないでください。

実際には、アクティビティクラスはビデオクリップを記録する(たとえば10秒)MediaRecorderです。したがって、私はこの録音がまだ不完全な間に別のアクティビティをトリガーしたくありません。

答えて

0

レシーバと通信して、すでに動作しているかどうかを知らせるだけの方法が必要です。あなたがそれを持っているなら、それは受信者の中でそれが倍数を起動させないifステートメントを作ることができます。

オプションは、現在実行中かどうかを示すアクティビティ内の静的ブール値です。その後、ブール値を受信側からチェックし、trueの場合はstartActivity()をコールしないでください。

あなたの活動は、このような何か必要があります:あなたは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); 
    } 
} 
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); 
} 
+0

申し訳ありません。私はこれを試みた。それは動作していません。 Timが上で述べたようにブール値を使う! – humansg

関連する問題