Androidアプリ開発 Notificationにアクション処理を追加する

2016年05月09日(編集2016年05月09日)
このエントリーをはてなブックマークに追加

Androidアプリでユーザーに通知をおこなうには、Notificationの機能を使います。さらにNotificationは、クリック時のアクション処理を実装することもできます。

この記事は、Notificationのアクション処理の実装方法を記載した記事です。

環境はAndroid 6.0 (API level 23) です。

環境

  • android sdk 23
  • Build Tools, Revision 23.0.3
  • Android Studio 2.1.0

難易度

初心者向け

Notificationとは

Notificationは、Android端末画面上部のステータスバーに、通知を表示する機能です。

ステータスバーのNotification

ステータスバーを下にスワイプして開くことのできるNotification drawerでは、複数のNotificationを並べることができます。
また、クリック処理を実装することもできます。

Notification drawer内のNotification

利用例

  • Gmail
  • Twitter
  • Line
  • Smart News

上記の他にも多くのアプリで利用されています。GmailとLineのNotificationの使い方が、一番ユーザーフレンドリーだと思います。

実装

ステータスバーに表示するNotificationは、この記事を参考にしてください。
ここでは、Notification drawer内に表示されたNotificationにアクション処理を追加実装します。

{project_folder}/app/{package}/ui/MainActivity.java
public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener, MainFragment.OnListFragmentInteractionListener {

    // something

    private void statusBarNitify() {

        +// Content Activity is a activity that is transferred from a list content.
        +Intent resultIntent = new Intent(this, ContentActivity.class);

        +PendingIntent resultPendingIntent =
        +        PendingIntent.getActivity(
        +                this,
        +                0,
        +                resultIntent,
        +                PendingIntent.FLAG_UPDATE_CURRENT
        +        );

        NotificationCompat.Builder mBuilder =
                (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle("My Notification")
                        .setContentText("Hello World!")
                        +.setAutoCancel(true)
                        .setTicker("notification is displayed !!");

        +mBuilder.setContentIntent(resultPendingIntent);
        +// click remove
        +mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;

        int mNotificationId = 001;

        // Gets an instance of the NotificationManager service
        NotificationManager mNotifyMgr =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Builds the notification and issues it.
        mNotifyMgr.notify(mNotificationId, mBuilder.build());
    }

    // something

}
        

■ 実装のポイント

  • PendingIntentクラスの生成
PendingIntent resultPendingIntent =
        PendingIntent.getActivity(
                this,
                0,
                resultIntent,
                PendingIntent.FLAG_UPDATE_CURRENT
        );
        

PendingIntentは、後で呼び出して利用できるIntentです。Pendingは保留という意味です。保留しているIntent。つまり、後で利用するIntentです。

  • クリックされたNotificationを消す
setAutoCancel(true)

mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;
        

クリックされたNotificationは、表示を残すより削除した方が、ユーザーにとって使いやすいアプリになる場合がほとんどです。
それには、上記の二つの処理(setAutoCancelとmBuilder.build().flags)を使います。

  • NotificationCompat.BuilderにPendingIntentを追加
mBuilder.setContentIntent(resultPendingIntent);
        

クリック時に起動するPendingIntentをNotificationCompat.Builderに設定します。

以上で準備は完了です。

ビルドして実行

実装を終えたら、ビルドしてアプリを実行します。

ビルドしてアプリ立ち上げ

Notificationをクリックして、PendingIntentで設定したアプリのContentActivity.classを起動できました。

まとめ

Notificationは、ユーザーに情報を通知するための大事な機能です。

通知後に、Notificationをクリックしてアプリを起動できるようにしておきましょう。

関連記事

タグ検索で調べてみよう

Android6.0 UI