是在系统的通知栏中呈现多样式持久性消息的类
自定义通知栏
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建一个构造者
Notification.Builder builder = new Notification.Builder(this);
//设置标题
builder.setContentTitle("标题");
//内容
builder.setContentText("内容");
//时间
builder.setWhen(System.currentTimeMillis());
//必须设置的小图标
builder.setSmallIcon(R.mipmap.ic_launcher);
//创建发送的对象
Notification build = builder.build();
//获取通知管理器,负责发通知、清除通知等 需要强转
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//发送
/**
* 第一个参数是发送的系统通知的位置,改变数字多发送几个自己试试看
* 第二个是发送的对象
*/
notificationManager.notify(1,build);
}
具有交互的通知
PendingIntent
PendingIntent 是一种特殊的 Intent ,字面意思可以解释为延迟的 Intent ,用于在某个事件结束后执行特定的 Action 。从上面带 Action 的通知也能验证这一点,当用户点击通知时,才会执行。
package com.example.day3_lx;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
private long exittime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设成全局 好操作
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//创建一个构造者
final Notification.Builder builder = new Notification.Builder(this);
//设置图片
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle("这是弹出的通知标题");
builder.setContentText("这是弹出的信息内容");
//弹出设置
builder.setDefaults(Notification.DEFAULT_ALL);
builder.setPriority(Notification.PRIORITY_MAX);
//交互式跳转
Intent intent = new Intent(this,MainActivity2.class);
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);
//设置意图对象
builder.setContentIntent(activity);
//创建发送的对象
Notification build = builder.build();
//获取通知管理器,负责发通知、清除通知等 需要强转
//发送
/**
* 第一个参数是发送的系统通知的位置,改变数字多发送几个自己试试看
* 第二个是发送的对象
*/
notificationManager.notify(1,build);
}
}
呼吸灯,震动,弹出
添加两个属性就可以,其余跟上个自定义的消息一样
进度条通知栏
package com.example.day3_lx;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设成全局 好操作
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//创建一个构造者
final Notification.Builder builder = new Notification.Builder(this);
//设置图片
builder.setSmallIcon(R.mipmap.ic_launcher);
//创建个计时器
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int k=0;
@Override
public void run() {
//创建进度条
builder.setProgress(100, k, false);
k=k+20;
//实时更新
notificationManager.notify(1,builder.build());
if(k==100){
//设置当前状态
builder.setContentTitle("正在安装");
builder.setProgress(0,0,true);
notificationManager.notify(1,builder.build());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//安装完关闭
notificationManager.cancel(1);
timer.cancel();
}
}
//第一个参数是延迟,第二个参数是多久执行一次
},0,1000);
//创建发送的对象
Notification build = builder.build();
//获取通知管理器,负责发通知、清除通知等 需要强转
//发送
/**
* 第一个参数是发送的系统通知的位置,改变数字多发送几个自己试试看
* 第二个是发送的对象
*/
notificationManager.notify(1,build);
}
}
双击返回键退出
模拟器的返回键 双击两次退出程序
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
//判断为是否是同一个预期值之内,是的直接退出,不是的话就提示在按一次
if(System.currentTimeMillis()-exittime>2000){
Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
exittime=System.currentTimeMillis();
//返回为true 表示为处理完此事务
return true;
}else {
//关闭
finish();
}
}