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;