Androidでの通知バーの使用法

通知バーの使い方について書いたことがないのですが、今日勉強したときにここで見たばかりなので、ここでまとめます。

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);
        }
    }

今日の通知の内容は以上です。ご不明な点がございましたら、コメント欄でご相談ください。

おすすめ

転載: blog.csdn.net/weixin_38322371/article/details/113931612