2015年5月13日水曜日

NotificationのPendingIntentで注意すること

  • PendingIntent#getActivity
  • PendingIntent#getService
  • PendingIntent#getBroadcast
の第四引数は「PendingIntent.FLAG_CANCEL_CURRENT」を指定する。

理由

PendingIntent.FLAG_UPDATE_CURRENT を指定していると、一部機種でうまく動作しないことがあるため

不具合の再現手順

  1. PendingIntent.FLAG_UPDATE_CURRENTを指定したNotificationを行う
  2. アプリをアンインストール
  3. 同一アプリを再インストール
  4. 1.と同様のNotificationを行う
上記手順を行うと、ステータスバーにある通知をタップしてもgetActivityで指定しているActivityが起動されないなどの不具合が一部端末で発生する
(現状、Xperia Z2 SO-03F確認)

原因の予想

FLAG_UPDATE_CURRENT は、「存在していればそれを使う。新しい設定で置き換えない。」動作を行うフラグのため、
アンインストール前の同一PendingIntentのNotificationが残っており、アンインストール前の情報のアプリを起動しようとしているためだと思われます。



PendingIntent.FLAG_CANCEL_CURRENTを指定すると、「現在設定されているものがあれば、それをキャンセルして新しい設定を行う。」ので、正常に動作されました。