El uso de la barra de notificaciones en Android

Nunca he escrito sobre el uso de la barra de notificaciones. Lo acabo de ver aquí cuando estudié hoy, así que lo resumiré aquí.

1. Métodos relacionados de Notification.Builder

  • setWhen: Establece el tiempo de empuje, el formato es "hora: minuto". El tiempo de inserción se muestra en el lado derecho de la barra de notificaciones.
  • setShowWhen: Establezca si desea mostrar el tiempo de inserción.
  • setUsesShronometer: establece si se muestra el temporizador. Cuando es cierto, no se muestra la hora de envío y el intervalo de tiempo desde que se envía la notificación hasta la hora actual se muestra dinámicamente en el formato de "minutos: segundos".
  • setSmallIcon: establece el icono (icono pequeño) en la barra de estado.
  • setTicker: establece el texto del mensaje en la barra de estado.
  • setLargeIcon: establece el icono (icono grande) en la barra de notificaciones.
  • setContentTitle: establece el texto del título en la barra de notificaciones.
  • setContentText: establece el texto del contenido en la barra de notificaciones.
  • setSubText: establece el texto explicativo adicional en la barra de notificaciones, que se encuentra debajo del texto del contenido. Si se pone en servicio este método, la configuración de setProgress dejará de ser válida.
  • setProgress: establece la barra de progreso y el progreso actual. La barra de progreso se encuentra entre el texto del título y el texto del contenido.
  • setNumber: establece el número en la parte inferior derecha de la barra de notificaciones. Se puede usar junto con setProgress para indicar el valor de progreso actual.
  • setContentInfo: establece el texto en la parte inferior derecha de la barra de notificaciones. Si se llama a este método, la configuración de setNumber no es válida.
  • setContentIntent: establece la intención retrasada del contenido. PendingIntent, haz clic en la notificación para activar la intención. Por lo general, se llama al método getActivity de PendingIntent para obtener el objeto de intención retrasada, y getActivity significa saltar a la página después de hacer clic.
  • setDeleteIntent: establezca PendingIntent para eliminar la intención retrasada y active la acción cuando se borre la notificación.
  • setAutoCancel: establece si la notificación se borra automáticamente. Si es verdadero, la notificación desaparecerá automáticamente después de hacer clic en la notificación, si es falso, la notificación no desaparecerá después de hacer clic en la notificación.
  • setContent: configura una vista de barra de notificaciones personalizada RemoteViews para reemplazar la plantilla de vista predeterminada del Builder.
  • build: método de construcción. Una vez establecidos los parámetros anteriores, llame a este método para devolver el objeto de notificación.

2. Precauciones para utilizar el método anterior

  • Se debe llamar al método setSmallIcon; de lo contrario, no se mostrará el mensaje de notificación.
  • SetWhen y setUsesChronometer solo pueden llamar a uno de ellos al mismo tiempo, es decir, el tiempo de inserción y el contador no se pueden mostrar al mismo tiempo, porque ambos están ubicados en el lado derecho de la barra de notificaciones.
  • Solo se puede llamar a uno de setSubText y setProgress al mismo tiempo, porque las instrucciones adicionales y la barra de progreso se encuentran debajo del texto del título.
  • Solo se puede llamar a uno de setNumber y setContentInfo al mismo tiempo, porque el valor de recuento y la solicitud se encuentran en la parte inferior derecha de la barra de notificaciones.

3. Métodos relacionados de NotificationManager

  • notificar: envía el mensaje especificado a la barra de notificaciones
  • cancelar: cancela el mensaje especificado. Después de llamar a este método, el mensaje especificado en la barra de notificaciones desaparecerá
  • cancelAll: cancelar todos los mensajes (continuará)

4. Ejemplos de mensajes comunes

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

Tenga en cuenta aquí que usamos una variable de recuento para distinguir cada mensaje, por lo que el recuento debe cambiarse, de lo contrario se sobrescribirá el anterior.

5. Ejemplo de mensaje de tiempo

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

Eso es todo sobre el contenido de la notificación de hoy. Si tiene alguna pregunta, puede discutirla conmigo en el área de comentarios.

Supongo que te gusta

Origin blog.csdn.net/weixin_38322371/article/details/113931612
Recomendado
Clasificación