返回顶部
首页 > 资讯 > 移动开发 >android  通知栏理解使用
  • 298
分享到

android  通知栏理解使用

Android 2022-06-06 13:06:56 298人浏览 安东尼
摘要

1. Android 8.0 之前通知    Notification.Builder、 参考博客:https://blog.csdn.net/qi85481455/artic

1. Android 8.0 之前通知    Notification.Builder、

参考博客:https://blog.csdn.net/qi85481455/article/details/82895507

基本案例:


	  public void sendNotification(View view){
        // 设置点击通知启动  意图
        //   Intent intent = new Intent(this,MainActivity.class);
        Intent intent = new Intent();    // 通过通知意图启动拨打电话界面
        intent.setAction(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:"+110));
        PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,0);
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification.Builder builder=new Notification.Builder(this);
        builder.setContentTitle("小标题");
        builder.setContentText("通知内容");
        builder.setSmallIcon(R.mipmap.ic_launcher);   // 小图标
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));  // 大图标
        builder.setWhen(System.currentTimeMillis());  //设置时间
        builder.setAutoCancel(true);   // 点击启动Activity以后自动取消
        builder.setContentIntent(pi);
        Notification nf=builder.build();
        nf.flags= Notification.FLAG_INSISTENT;   // 设置以后通知栏不能被取消,不起作用????
        manager.notify(1,nf);    // 1 是通知id 可以根据1  取消通知 
    }
2. andorid 8.0 以后通知

参考郭神博客:Https://blog.csdn.net/guolin_blog/article/details/79854070

 android 8.0 系统通知问题:通知不能分类,如果关闭通知栏开关以后,那么所有的通知都不能收到
  android 8.0引入到了通知渠道概念,通知分组
比如把 有聊天 消息、订阅消息,把 聊天消息放入放入一个通知渠道 ,设置高优先级,
那么这个时候可以关闭订阅消息通知, 
还可以在通知栏中右滑,设置 再次显示通知时间, 通知通知开关对这个类别

基本案例:

package com.notificationdemo.denganzhi;
import android.annotation.Targetapi;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.opengl.Visibility;
import android.os.Build;
import android.provider.Settings;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    String  channelId1 = "chat";
    String  channelId2 = "subscribe";
    // 1. 创建通知渠道
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String channelName = "聊天消息";
            
            int importance = NotificationManager.IMPORTANCE_HIGH;
            createNotificationChannel(channelId1, channelName, importance);
            channelName = "订阅消息";
            importance = NotificationManager.IMPORTANCE_LOW;
            createNotificationChannel(channelId2, channelName, importance);
        }
    }
    @TargetApi(Build.VERSION_CODES.O)
    private void createNotificationChannel(String channelId, String channelName, int importance) {
        NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
        channel.setShowBadge(true);  // 允许显示角标
        NotificationManager notificationManager = (NotificationManager) getSystemService(
                NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);
    }
    // 2.  发送 聊挺通知 ,使用  channelId1 聊天渠道
    public void sendNotifiction1(View view){
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification notification = new NotificationCompat.Builder(this, channelId1)
                .setContentTitle("收到一条聊天消息")
                .setContentText("今天中午吃什么?")
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                .setAutoCancel(true)
                .setNumber(1000)   // 未读消息
                .build();
        manager.notify(1, notification);
    }
    // 3. 发送 订阅通知,使用通知渠道 channelId2
    public void sendNotifiction2(View view){
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification notification = new NotificationCompat.Builder(this, channelId2)
                .setContentTitle("发送一条订阅消息")
                .setContentText("地铁10号线商铺抢购中!!!!")
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                .setAutoCancel(true)
                .build();
        manager.notify(2, notification);
    }
}

问题: 如果用户关闭聊天通知开关,那么用户无法使用通知,动态判断通知栏

package com.notificationdemo.denganzhi;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.opengl.Visibility;
import android.os.Build;
import android.provider.Settings;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    String  channelId1 = "chat";
    // 1. 创建通知渠道
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String channelName = "聊天消息";
            
            int importance = NotificationManager.IMPORTANCE_HIGH;
  // 只会调用一次,系统有优化
            createNotificationChannel(channelId1, channelName, importance)
        }
    }
    @TargetApi(Build.VERSION_CODES.O)
    private void createNotificationChannel(String channelId, String channelName, int importance) {
        NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
        channel.setShowBadge(true);  // 允许显示角标
        NotificationManager notificationManager = (NotificationManager) getSystemService(
                NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);
    }
    public void sendNotifiction3(View view){
        
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = manager.getNotificationChannel(channelId1);
            // 获取通知 渠道配置  IMPORTANCE_NONE 表示 关闭通知渠道了
            if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
                Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
                intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
                intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel.getId());
                startActivity(intent);
                Toast.makeText(this, "请手动将通知打开", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

作者:小置同学


--结束END--

本文标题: android  通知栏理解使用

本文链接: https://lsjlt.com/news/29378.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作