2013-03-11 14 views
5

ブロードキャストレシーバーの内部で、アプリ(アクティビティ)を開始してデータを渡したいと考えています。アクティビティの開始時にインテントエキストラが表示されない

私の問題は、エクストラがアクティビティに引き継がれていないようです。私はonNewIntent(Intent i)機能内のデータを取得しようとしています。

アイデア?ここで

BroadcastReceiverで私の現在の試みです:

Intent intSlider = new Intent(); 
intSlider.setClass(UAirship.shared().getApplicationContext(), SliderMenuActivity.class); 
intSlider.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

intSlider.putExtra("action", ScreensEnum.Object); 
intSlider.putExtra("objectId", objectId); 
intSlider.putExtra("objectCode", objectCode); 
intSlider.putExtra("userId", userId); 

UAirship.shared().getApplicationContext().startActivity(intSlider); 

EDIT - を追加しましたonNewIntent(で使用されるコード)とのonCreate()

次のコードは、onCreate()で素晴らしい作品アプリが現在実行されていないときアプリが既に動作しているときは、onNewIntent()機能の同じコードが機能しません(つまり、追加機能はありません)。

Intent intent = getIntent(); 

if(intent.hasExtra("objectId")) { 

    loadDetail(intent.getStringExtra("objectId"), "2w232"); 
} 
+0

は 'onNewIntent'メソッドが呼び出されていますか? 'launchMode'は' SliderMenuActivity'に何を指定しましたか? –

+0

こんにちは、はいonNewIntent()が呼び出されます。 launchModeはsingelTask​​です。 – conor

+0

その後、 'onNewIntent'メソッドを投稿できますか? –

答えて

0

ドキュメントから抽出

これは そのパッケージには「singleTop」launchModeを設定し活動を呼びかけ、またはstartActivity(意図)を呼び出すときに、クライアントはFLAG_ACTIVITY_SINGLE_TOPフラグ を使用した場合です。いずれの場合も、アクティビティの新しい インスタンスの代わりにアクティビティスタックの先頭にアクティビティ が再起動されると、onNewIntent()は、使用されていたインテントを持つ既存のインスタンスに対して と呼ばれます を再起動してください。

アクティビティは常に新しいインテントを受信する前に一時停止するため、 このメソッドの後にonResume()を呼び出すことができます。

getIntent()は依然として元のインテントを返します。 setIntent(インテント)を使用して、この新しいインテントに更新することができます。

最後の段落で問題が説明されていると思います。

+0

Ahmed、私はあなたがタスクとバックスタックがAndroidでどのように機能するかをあなたはかなり理解しているとは思わないので、あなたの答えは本当に正しいとは言えません。彼らがどのようにここで働いているかについて読んでください:http://developer.android.com/guide/components/tasks-and-back-stack.html –

+0

アクティビティが既に実行中であるかどうかは、エクストラが取得するかどうかに影響しませんあなたはそれがすべてどのように動作するか誤解してしまったと思います。 –

+0

はい。インテントが配信される天気には影響しますが、そうではありませんか? –

7

問題はgetIntent()メソッドです。 というアクティビティを開始したという意図を返します。最新のものではありません。引数としてonNewIntentメソッドに渡されたインテントを使用する必要があります。

+1

同じこと、デバッグ時に私は両方のインテントをチェックしていました。彼らはどちらも空でした。 – conor

+0

hmm ..私はこの問題に直面したことはありませんし、googleで役に立つ情報を見つけることはできません.. =( –

-1

最後に受信したインテントをメンバ変数(mLastIntent)に格納できます。 次に、onResume()メソッドでこのメンバーを使用して余分なデータを問い合わせることができます。

private Intent mLastIntent; 
@Override 
protected void onNewIntent(Intent intent) { 
    mLastIntent = intent; 
}; 
+0

タグを追加してください。 –

1

あなたがマニフェストファイルのフラグFLAG_ACTIVITY_SINGLE_TOPまたは設定launchMode singleTopを設定する必要があります。

もちろん、onNewIntentが呼び出されたときは、getIntentは使用せず、引数として受け取ったインテントを受け取ります。 アクティビティインスタンスが既に存在する場合は、onNewIntentが呼び出されます。たとえば、前回ホーム画面のボタンを押したときなどです。

私はここに私のために働いたソリューションを書いた:Intent with old extra in onCreate() for singleTask Activity

関連する問題