tarotaroのエンジニア生活

技術ネタとか日々の仕事の話とか

Intent のputExtraで値が渡せない現象の解決方法

ちょっと、はまったので、解決方法を書いておきます。
この現象は、ActivityにsingleTopなどのフラグを設定しているときで、
渡すActivityがすでに起動しているときに起きます。たぶんnotificationから、intentでputExtraで
値を渡すときにハマる場合があるんじゃないかと思います。
つまりこういう時、

notificationから、Activityを起動
Intent にputExtraで、値を設定して、PendingIntentして送る。
notificationをクリック
     ↓
getIntentして、そのIntentで、getExtra系のメソッドを
使ってみたが値がない状態

これを回避するためには、
起動するActivityで、onNewIntentをオーバーライド(オーバーロード)する 。
起動するときに、値が欲しい場合もあるので、
onCreateでは、getIntentをしてIntentを取得してそれをonNewIntentの
引数に渡して起動するように書いておく。
コードで書くとこんな感じ

onCreate{
       :
onNewIntent(getIntent());
  :
}

onNewIntent(Intent intent){
value=intent.getExtra
           :
}

てな感じ。

もし、notificationから起動する場合は、singleTopとかの flagを設定しておくことを
お忘れなく。