通知を使用すると、情報を取得するときに、ステータス バーとロック画面インターフェイスに対応する情報を表示できます。通知がない場合、QQ、WeChat、その他のアプリケーションは積極的に通知することができません。新しい情報やリマインダーがあるかどうかを確認するために、携帯電話を時々チェックする必要があります。それからAndroidアプリケーションのエクスペリエンスはあまりにもひどかったです。これは、アプリケーションにおける通知の重要性も反映しています。今日は、通常の通知、折りたたみ通知、吊り下げ通知の 3 種類の通知を学習します。
3 つの通知の特徴:
- 通常の通知: 携帯電話の通知バーに最初に表示され、通知ページをプルダウンして表示する必要があります。表示されるコンテンツには、APP アイコン、タイトル、コンテンツの一部が含まれます。
- 折りたたみ式通知: 最初に携帯電話の通知バーに表示され、通知ページをプルダウンして表示する必要があり、表示される内容は通常の通知よりも多くなります。
- ハング通知: 通常の通知と同じコンテンツが表示されますが、通知ページをプルダウンせずに画面の真上にハングアップし、フォーカスは変更されず、ユーザー インターフェイス内に残ります。
3 種類の通知のレンダリング:
通知を実装するための一般的な手順は次のとおりです。
- [1.0] getSystemService() メソッドを通じて NOTIFICATION_SERVICE を渡し、システム通知マネージャー notificationManager を取得します。
- [2.0] 通知オブジェクトのビルダー クラス Android 3.0 (API レベル 11) を通じて、通知の各フィールドを設定する便利なメソッドが提供され、Android システム プラットフォームの通知レイアウト テンプレートを使用してプロンプト フレームが生成されます。通知;
- [3.0] 通知ビルダーを使用して、コンテンツ インテント (ジャンプ用)、アイコン、コンテンツなどの一連の属性を設定します。
- [4.0] 最後に、通知を開始するために、NotificationManager を通じてマネージャーの notify() に通知します。
1.0 通常の通知のコード ロジックを実現します。
//[1.0] 获取系统的通知管理者 notificationManager
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NOTIFICATION_SERVICE 文字列は Content クラスの静的定数です。
public void sendNomalNotification() {
/**
* Builder class for Notification objects.
* notification对象的 Builder 类,提供一种方便的方法来设置通知的各个字段,
* 并使用平台的通知的布局模板生成内容视图
*/
builder = new Notification.Builder(mContext);
//[2.0] 创建一个意图
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://haimabai.github.io/"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
//[3.0] 给 notification 的构建者设置内容意图
builder.setContentIntent(pendingIntent);
builder.setSmallIcon(R.mipmap.ic_launcher_round);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher_round));
builder.setAutoCancel(true);
builder.setContentTitle("普通通知");
//设置可见性
//VISIBILITY_PRIVATE:展示这个通知锁屏的情况下,但是隐藏敏感的或者私有的信息在安全锁屏;
//VISIBILITY_PUBLIC:展示这个通知在整一个锁屏;
//VISIBILITY_SECRET:没有揭示任何通知的信息在锁屏的情况下;
builder.setVisibility(Notification.VISIBILITY_PUBLIC);
builder.setContentText("这是普通通知的内容");
notificationManager.notify(0, builder.build());
}
以上が通常のNotificationの詳細な実装ですが、主な実装ロジックとしては、ボタンのクリックにより実装し、監視インターフェースのonClick()メソッドの実装メソッドでsendNomalNotification()を呼び出します。
注意すべき点の 1 つは、setVisibility() メソッドの使用は主に、ユーザー情報の通知の重要性に応じてさまざまな可視性レベルを設定することであるということです。 - VISIBILITY_PRIVATE: ロック画面の場合にはこの通知を表示しますが、機密情報や個人情報は非表示にします
。安全なロック画面;
- VISIBILITY_PUBLIC: ロック画面全体にこの通知を表示します;
- VISIBILITY_SECRET: ロック画面の場合は通知情報を通知しません。
もう 1 つ、最後の行 notificationManager.notify(0, builder.build()) では、notify() メソッドには 2 つのパラメータがあります。 -
id: このアプリケーションの通知の識別子
- notification: 通知内容を説明する通知オブジェクトユーザーに通知の種類を表示する
2.0 通知を折りたたむコード ロジックを実装します。
public void sendFlodingNotification() {
builder = new Notification.Builder(mContext);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://haimabai.github.io/"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
builder.setContentIntent(pendingIntent);
builder.setSmallIcon(R.mipmap.ic_launcher_round);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher_round));
builder.setAutoCancel(true);
builder.setContentTitle("折叠式 Notification");
RemoteViews remoteViews = new RemoteViews(getPackageName(),
R.layout.view_fold);
Notification notification = builder.build();
notification.bigContentView = remoteViews;
notificationManager.notify(1, builder.build());
}
折りたたまれた通知の最大の特徴は、レイアウトを通知に埋め込むことができることで、通知をより使いやすくし、ユーザーが通知からより多くの情報を取得できるようにすることです。R.layout.view_fold は埋め込みレイアウトです。
モザイク レイアウトの元のレンダリング:
このレイアウトを実現するコードも非常に単純です。特定のコードをコピーして貼り付けることはしません。
3.0 ハング通知のコード ロジックを実装します。
public void sendFloatingNotification() {
builder = new Notification.Builder(mContext);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://haimabai.github.io/"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
builder.setContentIntent(pendingIntent);
builder.setSmallIcon(R.mipmap.ic_launcher_round);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher_round));
builder.setAutoCancel(true);
builder.setContentTitle("悬挂式 Notification");
//设置点击跳转
Intent hangIntent = new Intent();
hangIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
hangIntent.setClass(this, MainActivity.class);
//如果描述的PendingIntent已经存在,则在产生新的Intent之前会先取消掉当前的
PendingIntent hangPendingIntent = PendingIntent.getActivity(this, 0,
hangIntent, PendingIntent.FLAG_CANCEL_CURRENT);
builder.setFullScreenIntent(hangPendingIntent, true);
notificationManager.notify(2, builder.build());
}
上記 3 つの通知のコード ロジックはモバイル端末に表示され、ボタンのクリック イベントを実装して、対応するメソッドを直接呼び出すだけです。
もちろん、現在の Android 8.0 (API レベル 26) 以降のシステムは、次のようなより優れた通知方法をサポートしています。
- アプリアイコン上にAPPを直接表示可能
- ユーザーはAPPアイコンを直接長押しして通知を表示できます。
もっと通知を知りたい、使いたい場合は、Google の公式ドキュメントを参照することをお勧めします (笑)