Notification通知
通知类型 | 特殊方法 |
---|---|
普通通知 | |
进度条通知 | builder.setProgress(100,50,true); |
自定义通知 | builder.setContent(remoteViews); |
一.普通通知 (效果+代码)
代码如下:
button1.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onClick(View v) {
// 通知管理者
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 通知构建者
Notification.Builder builder = new Notification.Builder(MainActivity.this);
// 必须设置的属性,不设置没有通知显示
builder.setSmallIcon(R.mipmap.ic_launcher);
// 其他属性
builder.setContentTitle("我是标题");
builder.setContentText("我是内容");
builder.setContentInfo("我是附加信息");
builder.setTicker("我是提示信息");
// 设置通知自动消失
builder.setAutoCancel(true);
// 设置通知的效果 震动,音效,呼吸灯
builder.setDefaults(Notification.DEFAULT_ALL);
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
// 上下文,请求码,intent对象,flag
PendingIntent activity = PendingIntent.getActivity(MainActivity.this, 100, intent, PendingIntent.FLAG_ONE_SHOT);
// 设置跳转
builder.setContentIntent(activity);
// 发送通知
manager.notify(1,builder.build());
}
});
这样我们就完成的上面的效果图
二.自定义通知 (效果+代码)
代码如下:
// 自定义通知
button2.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.N)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onClick(View v) {
// 通知管理者
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 通知构建者
Notification.Builder builder = new Notification.Builder(MainActivity.this);
// 必须设置的属性,不设置没有通知显示
builder.setSmallIcon(R.mipmap.qqyinle);
// 设置自定义布局
RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.layout);
builder.setContent(remoteViews);
// 安卓7版本以后的手机调用方法
// builder.setCustomContentView(remoteViews);
// 发送通知
manager.notify(2,builder.build());
}
});
这样我们就完成的上面的效果图
三.进度条通知 (效果+代码)
代码如下:
// 进度条通知
button3.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onClick(View v) {
// 通知管理者
final NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 通知构建者
final Notification.Builder builder = new Notification.Builder(MainActivity.this);
// 必须设置的属性,不设置没有通知显示
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle("正在下载...");
manager.notify(3,builder.build());
// 模拟下载
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
builder.setProgress(100,progress+=10,false);
manager.notify(3,builder.build());
// 模拟安装
if (progress==100) {
builder.setProgress(100,100,true);
builder.setContentTitle("正在安装...");
manager.notify(3,builder.build());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
manager.cancel(3);
timer.cancel();
Message message = Message.obtain();
handler.sendMessage(message);
}
}
},0,1000);
}
});
}
这样我们就完成的上面的效果图
双击退出
Activity中重写onKeyDown方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
long Time = System.currentTimeMillis();
if (Time - l > 2000) {
Toast.makeText(KeyEventActivity.this, "再按一次退出", Toast.LENGTH_SHORT).show();
l = Time;
return true;
} else{
finish();
}
}
return super.onKeyDown(keyCode, event);
}
这就是我所掌握的通知的所有知识与内容