Android 7でアラートをグループ化する

Android 7に更新した後、通知がアプリケーションごとに自動的にグループ化され始めたことに気付きました。 Androidの新しいバージョンのリリース時点では、アプリケーションにはまだ通知履歴がないため、この変更は非常に重要でした。1つのグループに表示される通知は7つだけです。 つまり、アプリケーションを介して1日に20以上の通知を受け取った場合、新しい通知をスワイプして古い通知を表示する必要があります。



グループ内の通知は優先度順にソートされます。 グループに7つの通知があり、優先度が1つ低い場合-最初に通知が一番上に表示され、次に一番下まで飛んで、特定の数の通知を削除するまでリストに表示されません。



チャンネルごとにグループ化しました。これにより、チャンネルをすぐに確認し、可能であれば折りたたむことができます。 チャンネルから100件の通知が送信されても​​、それらは一度に簡単に折りたたまれて削除されます。



この記事では、公式マニュアルが機能しない理由と、すべてを正しく行う方法を見つけた方法について説明します。



公式マニュアルには何と書かれていますか?







ここにアクセスすると 、「Builder.setGroup()メソッドを使用して同様の通知をバンドルできます」という単純な推奨事項があります。 そして、彼らはここに行くことを勧めます









これはAndroid Wearでのみ機能します。 入力することで解決策を見つけましたが、記事を書いているときに別のマニュアルが記事に見つかりました。 部分的には真実ですが、ほとんど説明されていません。



どうやって



上記のマニュアルには、「要約通知も作成することが重要です。 setGroupSummary(true)で示されるこのサマリー通知は、マシュマロ以下のデバイスに表示される唯一の通知であり、個々の通知をすべて(推測して)要約する必要があります。 これはInboxStyleを使用するのに適切な時期ですが、使用する必要はありません。 Android N以降のデバイスでは、一部の情報(サブテキスト、コンテンツインテント、削除インテントなど)が要約通知から抽出され、バンドル通知の折りたたみ通知が生成されるため、引き続きすべてのAPIレベルで要約通知を生成する必要があります」



それからすぐに私達が出会った傷が現れます。



1. APIのバージョンを制限する必要があります



Android 7より前のバージョンでは、グループ化を完全にオフにすることをお勧めします。そうしないと、ソリューションを使用するときにグループに通知が表示されません。



Boolean groupflag = false; if(Build.VERSION.SDK_INT > 23){ groupflag = true; }
      
      





2.自動クローズおよび再作成



setAutoCancel(true)が指定されていない場合-グループからの最新の通知をクリックすると-グループはリストに残ります。 グループから別の通知が届くと、同じIDでメインヘッダーを再作成できます。識別のために、そのような通知にチャネルID(subid)を使用し、グループヘッダーはsetContentTitleを介して設定されます。



 if(groupflag) { Notification mainnotif = new NotificationCompat.Builder(this) .setContentTitle(subname) .setAutoCancel(true) .setSmallIcon(R.mipmap.ic_launcher) .setGroupSummary(true) .setGroup(subname) .setStyle(new NotificationCompat.MessagingStyle(subname)) .setColor(ContextCompat.getColor(context, R.color.blue)) .setSubText(subname) .build(); notificationManager.notify(subid, mainnotif); }
      
      





3.通知自体を作成する



setGroup(サブネーム)を忘れないでください。 また、興味深いライフハックです。標準のグループ化をオフにする必要がある場合、たとえば、ヘッダー通知を作成せずにsetGroup(「App」)を追加できます。 そうすると、デバイス自体のグループ化は機能しませんが、時計のグループも無効にするには、そこにランダムなテキストを書き込む価値があると思います。 グループを指定しないと、通知はアプリケーションごとにグループ化されます。



  NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( context).setSmallIcon(R.mipmap.ic_launcher) .setAutoCancel(true) .setWhen(time) .setTicker(title) .setLargeIcon(icon) .setContentTitle(title) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setContentText(msg) .setVibrate(new long[0]) .setSubText(subname) .setGroupSummary(false) .setColor(ContextCompat.getColor(context, R.color.blue)); if(groupflag) mBuilder.setGroup(subname);
      
      





アプリケーションでこのような通知を試すことができます。デバイスをアカウントに追加し、プロファイルでアカウントを4〜6回pingするだけです。 この実装により、通知領域のスペースを大幅に節約し、それらを効率的に管理できます。 アプリケーションでは、以前の通知を置き換えて、基本的にそれを読み取る機能を削除するか、または可能な限りグループ化を使用しないようにする方法を頻繁に見ます。



また、メタデータセクションによると、addPerson()メソッドを使用して、通知にユーザーのリストを追加できます。 これにより、通知は、これらの人々からの通知をグループ化するか、これらの人々からの通知をより重要と見なすようにシステムに信号を送ることができます。」 ただし、この方法は試していません。



All Articles