android 通知(Notification)那点事

 Android 中 通知 Notification的使用

NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("通知")
                .setContentText("文本信息......")
                .setContentIntent(initIntent()) //设置点击之后的操作
                .setAutoCancel(true)//点击删除
                .addAction(R.mipmap.ic_launcher, "取消", snoozePendingIntent)//添加按钮事件
               
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(MainActivity.this);

        notificationManager.notify(cont++, builder.build());

*注意

1.必须设置以下三项

 .setSmallIcon(R.mipmap.ic_launcher)
 .setContentTitle("通知")
 .setContentText("文本信息......")

//自定义 Notification 的时候 使用
    new RemoteViews(mAppContext.getPackageName(), R.layout.notification_view);
//*布局中能使用的控件是有限的
AnalogClock,Button,Chronometer,ImageButton,mageView,ProgressBar,TextView这7种,
//*布局的宽度必须为0,wrap_content,或者match_parent

2.添加addAction()  可以跳转页面 也可以是处理一些其他事件 这里要说的是使用广播来处理事件

.addAction(R.mipmap.ic_launcher, "取消", snoozePendingIntent)//添加按钮事件
	//添加事件可以放到一个广播中来处理
	//1.注册广播
	MyBroadcastReceiver 需要在清单文件里面注册
	
        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="tedt"/>
            </intent-filter>
        </receiver>
		
	//2.接收广播

	public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String aa = intent.getStringExtra("aa");

        Toast.makeText(context, "接收到了广播" + aa, Toast.LENGTH_SHORT).show();

    }
}

//3.设置广播
//转换为PendingIntent
 Intent snoozeIntent = new Intent(MainActivity.this, MyBroadcastReceiver.class);
                snoozeIntent.setAction("tedt");
                snoozeIntent.putExtra("aa", "--值110");
                PendingIntent snoozePendingIntent =
                        PendingIntent.getBroadcast(MainActivity.this, 0, snoozeIntent, 0);
						

以上是 在android8.0之前 上面的写法是对的  也不需要 CHANNEL_ID 通道id但是android8.0之后官方必须设置渠道

3.android8.0之后通知的使用 通知必须设置渠道(渠道一般只设置一次所以写到Myapplication中)

 

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
       CharSequence name = getString(R.string.app_name);
       String description = getString(R.string.app_name);
       int importance = NotificationManager.IMPORTANCE_DEFAULT;
       NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
       channel.setDescription(description);
	  channel.setImportance(NotificationManager.IMPORTANCE_HIGH);//设置渠道的重要性(最高的可以悬浮和声音)
                 
NotificationManager notificationManager =getSystemService(NotificationManager.class);
                    notificationManager.createNotificationChannel(channel);
                }

4.还有一个需要注意的地方就是
 //在android5.0之前 通知悬浮只需要设置 
 builder.setTicker("悬浮通知");
 
 //在android 5.0之后必须设置
  //****这样设置之后会消失 android5.0之后8.0之前
builder.setTicker("悬浮通知");
builder.setDefaults(~0);
builder.setPriority(Notification.PRIORITY_HIGH);
// setDefaults 有四种情况
 
    public static final int DEFAULT_ALL = ~0;
    public static final int DEFAULT_SOUND = 1;
    public static final int DEFAULT_VIBRATE = 2;
    public static final int DEFAULT_LIGHTS = 4;
 //也可以通过设置 setFullScreenIntent 来实现悬浮 但是这样通知不会自动消失
 
 builder.setFullScreenIntent(initIntent(), true); //设置之后不会消失
 
 
 //在android 8.0之后 通知悬浮以上方法是没有用的 只能通过设置渠道的重要性
 // android 8.0之后 设置中重要性  最高支持 声音和悬浮
//在渠道中设置
 channel.setImportance(NotificationManager.IMPORTANCE_HIGH);

public static final int IMPORTANCE_DEFAULT = 3;
public static final int IMPORTANCE_HIGH = 4;
public static final int IMPORTANCE_LOW = 2;
public static final int IMPORTANCE_MAX = 5;
public static final int IMPORTANCE_MIN = 1;
public static final int IMPORTANCE_NONE = 0;
public static final int IMPORTANCE_UNSPECIFIED = -1000;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值