setFullScreenIntentを使っていてIntentが勝手に起動する

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Heads Up Notificationを出すために、Notification.Builder#setFullScreenIntentしていて、
出てきたHeads Up Notificationを上フリックして消してから
Notification開いて起動して、もう一度同じNotificationを出すと
Intentが勝手に起動する現象が起きるようです。(コード読めばどうなっているのか分かりそうですが、時間があったら調べます)

Android 5.0では再現しませんでしたが
5.1やAndroid M Previewでは再現しました。
こういう点を注意して実装する必要がありそうです。

fullscreenintent5.1.0.gif

        final Intent intent = new Intent(this, SubActivity.class);
        final PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        final Notification notification = new NotificationCompat
                .Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("title")
                .setContentText("text")
                .setAutoCancel(true)
                .setContentIntent(pendingIntent)
                .setFullScreenIntent(pendingIntent, true)
                .build();
        final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(10, notification);

再現したプロジェクト
https://github.com/takahirom/setFullScreenIntentBehavior/blob/master/app/src/main/java/com/kogitune/setfullscreenintentbehavior/MainActivity.java#L32

Android Developersにも

On some platforms, the system UI may choose to display a heads-up notification, instead of launching this intent, while the user is using the device.

と書いてあるので、起動してしまうことは考慮に入れたほうが良いのかもしれません
http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setFullScreenIntent(android.app.PendingIntent, boolean)