My Photo

« 総コレステロール値がやばい | Main | Androidアプリ開発メモ049:TextViewのレイアウト設定:minLines,maxLines,gravity »

December 12, 2011

Androidアプリ開発メモ048:onNewIntent()

本に載っていたTwitterクライアントのサンプルアプリのコードに onNewInten() というメソッドが使われていたが、詳しい説明がなかったので調べた。

android.app.Activityクラス
protected void onNewIntent(Intent intent)
startActivity()を呼んだときに、これはlaunchModeに"simgleTop"と設定したアクティビティへ、あるいはFLAG_ACTIVITY_SINGLE_TOPフラグをつかったクライアント、呼ばれる。
onNewIntent()はアクティビティを再起動するために使用されたIntentとともに既存のインスタンス上で呼び出される。
アクティビティは常に新しいインテントを受信する前に一時停止されるので、このメソッドの後にonResume()が呼ばれることを期待できる。
getIntent()はまだオリジナルのインテントを返すことに注意せよ。setInent()で新しいインテントに更新することができる。
引数
  intent  アクティビティに向けてスタートさせられた新しいアクティビティ

startActivity()で新しいアクティビティが作られるのではなく既存のアクティビティが使われる場合にこのメソッドが呼ばれる。
AndroidManifest.xmlのactivity要素のlaunchMode属性の値によって、新しいアクティビティのインスタンスが作られてインテントを処理するのか、既存のアクティビティがインテントを処理するのかが決まる。
リファレンスのメソッドの説明では"singleTop"しか書かれていないが、singleTaskとsingleInstanceの場合もこのメソッドが呼ばれる場合がある。
下記の参考ページで非常にわかりやすく説明されている。

本に載っていたTwitterクライアントでは、launchModeはsingleInstanceになっていた。
アプリの動きは
WebViewでTwitterの認証画面を表示
->認証に通ったら"myapp://mainactivity"というURLデータを持ったIntentがこのクライアントに投げられる(startActivity()が呼ばれる)。
->このクライアントのインスタンスのonNewIntent()が投げられたIntentを処理する。
となっていると推測している。
#きちんと調べてないので推測でしかない。

AndroidManifest.xmlのactivity要素。
<activity>
  android:label="@string/app_name"
  android:name=".Twinto"
  android:launchMode="singleInstance" >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="myapp" android:host="mainactivity" />
  </intent-filter>
</activity>
デバッグログの出力
xx-xx xx:xx:xx.xxx: V/TEST(xxx): onNewIntent():action=android.intent.action.VIEW,category=[android.intent.category.BROWSABLE],uri=myapp://mainactivity?oauth_token=xxxxxxxxxx&oauth_verifier=xxxxxxxxxx

参考ページ:Y.A.M の 雑記帳: Android launchMode の違い

« 総コレステロール値がやばい | Main | Androidアプリ開発メモ049:TextViewのレイアウト設定:minLines,maxLines,gravity »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/53470148

Listed below are links to weblogs that reference Androidアプリ開発メモ048:onNewIntent():

« 総コレステロール値がやばい | Main | Androidアプリ開発メモ049:TextViewのレイアウト設定:minLines,maxLines,gravity »

April 2017
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof