通知バーの使い方について書いたことがないのですが、今日勉強したときにここで見たばかりなので、ここでまとめます。
1.Notification.Builderの関連メソッド
- setWhen:プッシュ時間を設定します。形式は「時間:分」です。プッシュ時間は通知バーの右側に表示されます。
- setShowWhen:プッシュ時間を表示するかどうかを設定します。
- setUsesShronometer:タイマーを表示するかどうかを設定します。trueの場合、プッシュ時間は表示されず、通知がプッシュされてから現在の時間までの時間間隔が「分:秒」の形式で動的に表示されます。
- setSmallIcon:ステータスバーにアイコン(小さなアイコン)を設定します。
- setTicker:ステータスバーにプロンプトテキストを設定します。
- setLargeIcon:通知バーにアイコン(大きなアイコン)を設定します。
- setContentTitle:通知バーにタイトルテキストを設定します。
- setContentText:通知バーにコンテンツテキストを設定します。
- setSubText:コンテンツテキストの下にある通知バーに追加の説明テキストを設定します。このメソッドが試運転されると、setProgressの設定は無効になります。
- setProgress:プログレスバーと現在の進行状況を設定します。プログレスバーは、タイトルテキストとコンテンツテキストの間にあります。
- setNumber:通知バーの右下にある番号を設定します。setProgressと組み合わせて使用すると、現在の進行状況の値を示すことができます。
- setContentInfo:通知バーの右下にテキストを設定します。このメソッドが呼び出された場合、setNumberの設定は無効です。
- setContentIntent:コンテンツの遅延インテントPendingIntentを設定し、通知をクリックしてインテントをトリガーします。通常、PendingIntentのgetActivityメソッドは、遅延インテントオブジェクトを取得するために呼び出され、getActivityは、クリックした後にページにジャンプすることを意味します。
- setDeleteIntent:遅延インテントを削除するようにPendingIntentを設定し、通知がスワイプされたときにアクションをトリガーします。
- setAutoCancel:通知を自動的にクリアするかどうかを設定します。trueの場合、通知をクリックすると通知は自動的に消えます。falseの場合、通知をクリックしても通知は消えません。
- setContent:カスタマイズされた通知バービューRemoteViewを設定して、Builderのデフォルトのビューテンプレートを置き換えます。
- build:ビルドメソッド。上記のパラメータを設定した後、このメソッドを呼び出して、Notificationオブジェクトを返します。
2.上記の方法を使用する際の注意事項
- setSmallIconメソッドを呼び出す必要があります。そうしないと、通知メッセージが表示されません。
- SetWhenとsetUsesChronometerは、同時に1つしか呼び出すことができません。つまり、プッシュ時間とカウンターは両方とも通知バーの右側にあるため、同時に表示することはできません。
- 追加の手順と進行状況バーがタイトルテキストの下にあるため、同時に呼び出すことができるのはsetSubTextとsetProgressのいずれか1つだけです。
- カウント値とプロンプトは通知バーの右下にあるため、同時に呼び出すことができるのはsetNumberとsetContentInfoのいずれか1つだけです。
3.NotificationManagerの関連メソッド
- 通知:指定したメッセージを通知バーにプッシュします
- キャンセル:指定したメッセージをキャンセルします。このメソッドを呼び出すと、通知バーに指定されたメッセージが消えます
- cancelAll:すべてのメッセージをキャンセルします(続く)
4.一般的なメッセージの例
private void sendSimpleNotify(String title,String message){
count++;
//从系统服务中获取通知管理器
NotificationManager notifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//调用后只有8.0以上执行
createNotifyChannel(notifyMgr,this,"channel_id");
//创建一个跳转到活动页面的意图
Intent clickIntent = new Intent(this,MessageActivity.class);
clickIntent.putExtra("flag",count);
//创建一个用于页面跳转的延迟意图
PendingIntent contentIntent = PendingIntent.getActivity(this,count,clickIntent
,PendingIntent.FLAG_UPDATE_CURRENT);
//创建一个通知消息的构造器
Notification.Builder builder = new Notification.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//Android8.0开始必须给每个通知分配对应的渠道
builder = new Notification.Builder(this,"channel_id");
}
builder.setContentIntent(contentIntent)//设置内容的点击意图
.setAutoCancel(true)//设置是否允许自动清除
.setSmallIcon(R.mipmap.ic_launcher)//设置状态栏里的小图标
.setTicker("提示消息来啦")//设置状态栏里面的提示文本
.setWhen(System.currentTimeMillis())//设置推送时间,格式为"小时:分钟"
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//设置通知栏里面的大图标
.setContentTitle(title)//设置通知栏里面的标题文本
.setContentText(message);//设置通知栏里面的内容文本
//根据消息构造器创建一个通知对象
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
Notification notify = builder.build();
//使用通知管理器推送通知,然后在手机的通知栏就会看到消息
notifyMgr.notify(count,notify);
}
}
/**
* 创建通知渠道,Android8.0开始必须给每个通知分配对应的渠道
* @param notifyMgr
* @param ctx
* @param channelId
*/
private void createNotifyChannel(NotificationManager notifyMgr,Context ctx,String channelId){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//创建一个默认重要性的通知渠道
NotificationChannel channel = new NotificationChannel(channelId,"Channel",NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(null,null);
channel.setShowBadge(true);
channel.canBypassDnd();//可否绕过请勿打扰模式
channel.enableLights(true);//闪光
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);//锁屏显示通知
channel.setLightColor(Color.RED);//指定闪光时的灯光颜色
channel.canShowBadge();//桌面ICON是否可以显示角标
channel.enableVibration(true);//是否可以震动
channel.getGroup();//获取通知渠道组
channel.setVibrationPattern(new long[]{100,100,200});//震动的模式
channel.shouldShowLights();//是否会闪光
notifyMgr.createNotificationChannel(channel);
}
}
ここでは、各メッセージを区別するためにカウント変数を使用しているため、カウントを変更する必要があることに注意してください。変更しないと、前のメッセージが上書きされます。
5.タイミングメッセージの例
private void sendSimpleNotify(String title,String message){
count++;
//从系统服务中获取通知管理器
NotificationManager notifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//调用后只有8.0以上执行
createNotifyChannel(notifyMgr,this,"channel_id");
//创建一个跳转到活动页面的意图
Intent clickIntent = new Intent(this,MessageActivity.class);
clickIntent.putExtra("flag",count);
//创建一个用于页面跳转的延迟意图
PendingIntent contentIntent = PendingIntent.getActivity(this,count,clickIntent
,PendingIntent.FLAG_UPDATE_CURRENT);
//创建一个通知消息的构造器
Notification.Builder builder = new Notification.Builder(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//Android8.0开始必须给每个通知分配对应的渠道
builder = new Notification.Builder(this,"channel_id");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
builder.setContentIntent(contentIntent)//设置内容的点击意图
.setAutoCancel(false)//设置是否允许自动清除
.setUsesChronometer(true)//设置是否显示计数器
.setProgress(100,60,false)//设置进度条与当前进度
.setNumber(99)//设置通知栏右下方的数字
.setSmallIcon(R.mipmap.ic_launcher)//设置状态栏里的小图标
.setTicker("提示消息来啦")//设置状态栏里面的提示文本
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//设置通知栏里面的大图标
.setContentTitle(title)//设置通知栏里面的标题文本
.setContentText(message);//设置通知栏里面的内容文本
//根据消息构造器创建一个通知对象
Notification notify = builder.build();
//使用通知管理器推送通知,然后在手机的通知栏就会看到消息
notifyMgr.notify(count,notify);
}
}
/**
* 创建通知渠道,Android8.0开始必须给每个通知分配对应的渠道
* @param notifyMgr
* @param ctx
* @param channelId
*/
private void createNotifyChannel(NotificationManager notifyMgr,Context ctx,String channelId){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//创建一个默认重要性的通知渠道
NotificationChannel channel = new NotificationChannel(channelId,"Channel",NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(null,null);
channel.setShowBadge(true);
channel.canBypassDnd();//可否绕过请勿打扰模式
channel.enableLights(true);//闪光
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);//锁屏显示通知
channel.setLightColor(Color.RED);//指定闪光时的灯光颜色
channel.canShowBadge();//桌面ICON是否可以显示角标
channel.enableVibration(true);//是否可以震动
channel.getGroup();//获取通知渠道组
channel.setVibrationPattern(new long[]{100,100,200});//震动的模式
channel.shouldShowLights();//是否会闪光
notifyMgr.createNotificationChannel(channel);
}
}
今日の通知の内容は以上です。ご不明な点がございましたら、コメント欄でご相談ください。