web-dev-qa-db-ja.com

NotificationCompat.Builderで通知を作成する方法は?

可能であれば、音とアイコンとともに通知バーに表示される簡単な通知を作成する必要がありますか?また、Android 2.2と互換性がある必要があるため、NotificationCompat.Builderは4以上のすべてのAPIで動作することがわかりました。より良い解決策があれば、お気軽に言及してください。

51
Vladimir

NotificationCompat.Builder は、すべてのAndroidバージョンでNotificationsを作成する最も簡単な方法です。 Android 4.1で利用可能な機能を使用することもできます。アプリがAndroid> = 4.1のデバイスで実行される場合、新しい機能が使用されます。Android <4.1で実行される場合、通知は単純な古い通知になります。

簡単な通知を作成するには、単に 通知に関するAndroid APIガイド を参照してください):

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Hello World!")
    .setContentIntent(pendingIntent); //Required on Gingerbread and below

少なくともsmallIconcontentTitle、およびcontentTextを設定する必要があります。あなたが1つを逃した場合、通知は表示されません。

注意:Gingerbread以下では、コンテンツの意図を設定する必要があります。そうしないと、IllegalArgumentExceptionがスローされます。

何もしないインテントを作成するには、次を使用します。

final Intent emptyIntent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

ビルダー、つまりRingtoneManagerからのサウンドを介してサウンドを追加できます。

mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))

通知は、NotificationManagerを介してバーに追加されます。

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(mId, mBuilder.build());
123
thaussma

作業例:

    Intent intent = new Intent(ctx, HomeActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder b = new NotificationCompat.Builder(ctx);

    b.setAutoCancel(true)
     .setDefaults(Notification.DEFAULT_ALL)
     .setWhen(System.currentTimeMillis())         
     .setSmallIcon(R.drawable.ic_launcher)
     .setTicker("Hearty365")            
     .setContentTitle("Default notification")
     .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
     .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
     .setContentIntent(contentIntent)
     .setContentInfo("Info");


    NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, b.build());
25
Sumoanand

私はこの方法を作り、うまく動作します。 (Android 6.0.1)でテスト済み)

public void notifyThis(String title, String message) {
    NotificationCompat.Builder b = new NotificationCompat.Builder(this.context);
    b.setAutoCancel(true)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.favicon32)
            .setTicker("{your tiny message}")
            .setContentTitle(title)
            .setContentText(message)
            .setContentInfo("INFO");

    NotificationManager nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE);
    nm.notify(1, b.build());
}

Android 8.0で通知を表示

@TargetApi(Build.VERSION_CODES.O)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)

  public void show_Notification(){

    Intent intent=new Intent(getApplicationContext(),MainActivity.class);
    String CHANNEL_ID="MYCHANNEL";
    NotificationChannel notificationChannel=new NotificationChannel(CHANNEL_ID,"name",NotificationManager.IMPORTANCE_LOW);
    PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),1,intent,0);
    Notification notification=new Notification.Builder(getApplicationContext(),CHANNEL_ID)
            .setContentText("Heading")
            .setContentTitle("subheading")
            .setContentIntent(pendingIntent)
            .addAction(Android.R.drawable.sym_action_chat,"Title",pendingIntent)
            .setChannelId(CHANNEL_ID)
            .setSmallIcon(Android.R.drawable.sym_action_chat)
            .build();

    NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);
    notificationManager.notify(1,notification);


}
3

詳細な通知

コード

Intent intent = new Intent(this, SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.your_notification_icon)
                        .setContentTitle("Notification Title")
                        .setContentText("Notification ")
                        .setContentIntent(pendingIntent );

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());

深い知識

通知は、通知を使用して作成できます。 BuilderまたはNotificationCompat.Builderクラス。
ただし、下位互換性が必要な場合は、NotificationCompat.Builderクラスをv4サポートライブラリの一部として使用する必要があります。 4以上。

コア通知プロパティ

通知には4つのコアプロパティがあります(3つの基本表示プロパティ+ 1クリックアクションプロパティ)

  • 小さなアイコン
  • タイトル
  • テキスト
  • ボタンクリックイベント(通知をタップするとクリックイベント)

ボタンクリックイベントは、Android 3.0以降でオプションになります。minSdkターゲットAndroid 3.0以上の場合、表示プロパティのみを使用して通知を作成できます。ただし、通知をAndroid 3.0よりも古いデバイスで実行する場合は、Clickイベントを提供する必要があります。そうでない場合、IllegalArgumentExceptionが表示されます。

通知表示

NotificationMangerクラスのnotify()メソッドを呼び出すと、通知が表示されます

notify()パラメーター

通知メソッドには2つのバリアントがあります

notify(String tag, int id, Notification notification)

または

notify(int id, Notification notification)

notifyメソッドは整数IDを受け取り、通知を一意に識別します。ただし、競合が発生した場合に通知をさらに識別するために、オプションのStringタグを提供することもできます。

このタイプの競合はまれですが、たとえば、いくつかのライブラリを作成し、他の開発者がライブラリを使用しています。今、彼らは彼ら自身の通知を作成し、どういうわけかあなたの通知と他の開発者の通知IDは同じです、そしてあなたは衝突に直面するでしょう。

API 11(詳細な制御)後の通知

API 11は、通知動作の追加制御を提供します

  • 通知の解雇
    デフォルトでは、ユーザーが通知をタップすると、割り当てられたクリックイベントが実行されますが、通知は消去されません。通知をクリアしたい場合は、これを追加する必要があります

    mBuilder.setAutoClear(true);

  • ユーザーが通知を消さないようにする
    ユーザーは通知をスワイプすることで却下することもできます。通知の作成中にこれを追加すると、このデフォルトの動作を無効にできます

    mBuilder.setOngoing(true);

  • 通知の位置
    通知に相対的な優先度を設定するには、

    mBuilder.setOngoing(int pri);

アプリが11よりも低いAPIで実行されている場合、通知は上記の追加機能なしで機能します。これは、Notification.BuilderよりもNotificationCompat.Builderを選択する利点です。

API 16後の通知(より有益な情報)

API 16の導入により、非常に多くの新機能が通知されました
通知は非常に有益です。
bigPictureをロゴに追加できます。その人の写真を表示できるmBuilder.setLargeIcon(Bitmap bitmap)を使用して、その人からメッセージを取得したとします。そのため、ステータスバーでは、スクロールするとアイコンが表示され、アイコンの代わりに人物の写真が表示されます。他の機能もあります

  • 通知にカウンターを追加します
  • 初めて通知が表示されたときのティッカーメッセージ
  • 拡張可能な通知
  • 複数行の通知など
2
Rohit Singh

簡単な通知方法

 NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher) //icon
            .setContentTitle("Test") //tittle
            .setAutoCancel(true)//swipe for delete
            .setContentText("Hello Hello"); //content
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(1, builder.build()
    );
1

あなたはこのコードを試すことができます、これは私にとってうまくいきます:

    NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this);

    Intent i = new Intent(noti.this, Xyz_activtiy.class);
    PendingIntent pendingIntent= PendingIntent.getActivity(this,0,i,0);

    mBuilder.setAutoCancel(true);
    mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
    mBuilder.setWhen(20000);
    mBuilder.setTicker("Ticker");
    mBuilder.setContentInfo("Info");
    mBuilder.setContentIntent(pendingIntent);
    mBuilder.setSmallIcon(R.drawable.home);
    mBuilder.setContentTitle("New notification title");
    mBuilder.setContentText("Notification text");
    mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

    NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(2,mBuilder.build());
1
Rohit Lalwani

このコードを使用

            Intent intent = new Intent(getApplicationContext(), SomeActvity.class);
            PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),
                    (int) System.currentTimeMillis(), intent, 0);

            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(getApplicationContext())
                            .setSmallIcon(R.drawable.your_notification_icon)
                            .setContentTitle("Notification title")
                            .setContentText("Notification message!")
                            .setContentIntent(pIntent);

            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(0, mBuilder.build());