2012-04-13 9 views
2

私は、動作しているかどうかに関わらず、別のアクティビティにデータを送信するために使用しているBroadcastReceiverを持っています。私は私のonReceive()メソッドでインテントを使い、putExtra()でデータを入れています。データはアクティビティに送信されますが、アクティビティがすでに実行されていてもフォアグラウンドであっても、アクティビティのonCreate()メソッドが呼び出されるため、新しいインスタンスが作成されているようです。私はonResume()を呼び出すだけです、あるいは存在しない場合はインテントを作成/開始できる他の方法があります。もしそうであれば、それを '再開'してください。今、活動は再現されており、私はこれを望んでいません。 開始可能な別のアクティビティへのデータの送信

public void onReceive(Context context, Intent intent) { 
      intent.setClass(context, MyActivity.class); 
      intent.putExtra("message", "the data here"); 
      //intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      Log.d("sending msg", "msg");  
      context.startActivity(intent);  
     } 

私はFLAG_ACTIVITY_NEW_TASKを使用しない場合

、RuntimeExceptionは、特に私が活動ではない何かから活動を開始したい場合は、私は FLAG_ACTIVITY_NEW_TASKを使用しなければならないことを私に言って、スローです。

答えて

1

私はコードで、イベントに登録し、民間の小さなハンドラメソッドを持っていた、(内部で)私BroadcastReceiverがでactvityなっていたことを、解析された情報を再放送終わりました。作成された受信機。これは良い解決策でした。私の知る限り、この活動は常に実行されていました。

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     receiver = new BroadcastReceiver(){ 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.d("activity", "in local defined receiver"); 
       if(intent.getAction().equals(CustomInternalSendSmsAction)) 
       { 
        handlePassedData(intent);    
       } 
      } 
     }; 
     this.registerReceiver(receiver, new IntentFilter(CustomInternalSendSmsAction)); 
} 
+0

この解決策は回避策です。それはあなたにとっては良いかもしれませんが、それは正解とマークすべきではありません。この質問に対する回答を探している他の人もここに来るでしょう。 – selalerer

+1

@selalerer、私はこれが回避策ではないと感じて、他の人のために働くでしょう。それは言われている、私はよりよい解決に開いています。より良い解決策があれば、ここに含めてください。 –

6

あなたが前にあなたの可能性が実行されている活動を持参し、その上にするかもしれない他の活動を終了したい場合は、ユーザーが指定することができ、次のフラグ:この場合

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

、あなたこのインテントを受け取ったアクティビティが既に実行されている場合、最初から再作成するのではなく、onNewIntent()メソッドが呼び出されます。

あなたは(すなわち、スタックの一番上に移動)ご希望のアクティビティが実行されている場合、単に活動の順序を変更したい場合は、以下を試してみてください。

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
+0

FLAG_ACTIVITY_NEW_TASKを使用する必要があります。上に指定したフラグを使用してください。 –

+0

Clear Top、Single Top、New TaskのORを実行しようとしましたが、NEW_TASKを実行していたときのようにデータがアクティビティで受け取られませんでした。 –

+1

onNewintent()を上書きしましたか? – selalerer

1

私はあなたがアンドロイドを追加すべきだと思う:launchMode =あなたのマニフェスト上のあなたのアクティビティ宣言に "singleTask"を追加するか、アクティビティがスタックのどこかに既に存在する場合は、singleTaskと全く同じことを行うフラグFLAG_ACTIVITY_NEW_TASKを使ってアクティビティインテントを開始します。

onCreate()の代わりにonNewIntent()を呼び出します。

さまざまな起動モードでの読み上げを行います。非常に重要なファンダメンタルズ! :D http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

http://developer.android.com/guide/topics/manifest/activity-element.html

+0

私は私の記事で述べたようにFLAG_ACTIVITY_NEW_TASKを使用しています。まだonCreate() –

+0

を呼び出していますが、あなたはその活動を後押ししていませんでしたか? – Rejinderi

+0

私はあなたの質問を理解していません。私はそれがログのためにonCreate()を再び呼び出していることを知っています。新しいインスタンスを作成して表示しています。 –

関連する問題