2011-09-15 14 views
2

私は3つのアクティビティ:Activity1、Activity2、Activity3を持っています。 Activity1とActivity3はActivity2を開始できます。Android:誰が開始アクティビティ

startActivity(新しいインテント(this、Activity2)); Activity2に私はActivity2を開始したクラスをチェックするにはどうすればよい

?インテントから情報を得る方法はありますか?ありがとう...

私はIntentに何かを置くことをしません。私はそれが必要ないと思う。私が意図を開始するとき、私はそれをどのような文脈からすでにしているのかをすでに述べています(新しい意図(*this*、活動2))。そして、この "これ"私はアクティビティ2で認識したい!それは可能ですか?

+0

にはい、あなたは 'Intent'に何かを入れたいですもう一方の側で提供された 'Context'で。また、これを行うAndroidの方法です、それと戦わないでください:) –

+0

あなたの 'this'がなぜ失われたのか技術的な説明のために私の答えを以下でチェックしてください。コメントが長すぎます。 –

答えて

2

「追加の」でその情報を渡すことができますあなたのIntentの:

Activity1

Activity2
Intent intent = new Intent(this, Activity2.class); 
intent.putExtra("caller", "activity1"); 
startActivity(intent); 

String caller = getIntent().getStringExtra("caller"); 

等、 booleanintのような他のデータ型のための余分な方法を置く/取得もあります

あなたが他の側にIntentを作成するときに供給Contextにアクセスすることができない理由については:

Androidが供給Context(すなわちでないことだけですあなたのthis)はそれからComponentNameを作成することです。このクラスではパッケージが提供されているだけです。Contextは他のものを破棄します。

理論的には、アクティビティを別のパッケージに入れて、受信側でgetIntent().getComponentName().getPackageName()に行ってもかまいませんが、しないでください。 Intentエキストラは道のりです。

0

インテントに情報を追加することでこれを行うことができます。例えば

:あなたは、この情報を調べることができ、新たに開始したサービスで

public Intent putExtra (name, value) 

また、他の答えのようにaddFlagsメソッドを使用することもできます。

1

あなたはIntentの「エクストラ」を使用して活動の間での情報に沿って渡すことができます。

Intent newIntent = new Intent(this, Activity2.class); 
newIntent.putExtra("CalledFrom", Activity1.class.getSimpleName()) 
startActivity(newIntent); 

次に、あなたが呼び出すことができるActivity受信に:

String fromActivity = getIntent().getStringExtra("CalledFrom"); 

をあなただけでなく、基本的な型を渡すことができますParcelableインターフェイスを実装するオブジェクト

0

Intentデータメンバーを使用して、アクティビティにパラメータを渡します。 extrasのデータメンバーは、Bundleです。汎用の名前/値のコレクションです。

Intent i = new Intent(this, Activity2); 
i.putExtra("From", "Activity1"); 
startActivity(i); 

アクティビティ2では、余分なデータの開始の意図を調べて、これを見つけることができます。

setData()で設定可能なインテントdataを使用することもできます。 DataメンバーはURIの形式を持ち、構造化された情報を渡すのにはやや面倒です。それは少しでも入力の少ないです。

Intent intent = new Intent(this,Activity2) 
intent.putExtra("activityNumber", 1); 
startActivity(intent); 

を受信するには:あなたが

Intent i=new Intent(); 
i.putExtra("startedBy","A1"); 
//or 
//i.putExtra("startedBy","A2"); 
//... 

と受信アクティビティの使用に比べて、いつものように膿フラグをできる活動を開始意思で

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    activitySource = extras.getInt("activityNumber"); 
} 
+0

別のバンドル 'bun'を作成してインテントの既存の' extra'バンドルに入れる理由は何ですか? –

+0

良い点。編集されました。 –

2

on activityresultメソッドの

Intent intent=getIntent(); 
if(intent.getStringExtra("startedBy").equals("a1"){ 
//do somth 
} 
0

を送信するために

0

クラスの単純な名前を使用する解決策が原因で、ClassNotFoundExceptionが見つかりました。私が使用ソリューションは似ていますが、正規名を使用しています。

Intent newIntent = new Intent(this, Activity2.class); 
newIntent.putExtra("caller", Activity1.class.getCanonicalName()) 
startActivity(newIntent); 

取得する方法はありませんので、その後、他の活動

String caller = getIntent().getStringExtra("caller"); 
Class callingClass = Class.forName(caller); 
関連する問題