day_03
程序员文章站
2024-02-10 11:14:29
...
双击退出,Notitfcation 通知
双击退出
实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。
判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出
@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时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,
// 表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,
return true;
}else{
finish(); //结束当前activity
}
}
return super.onKeyDown(keyCode, event);
}
Notitfcation 通知
定义:是在系统的通知栏中呈现多样式持久性消息的类
1、在通知栏显示
2、消息持久性
3、种类多样性
简单
//创建构造者
Notification.Builder builder = new Notification.Builder(this);
//设置属性 setSamllIcon该属性必须设置
builder.setSmallIcon(R.mipmap.ic_launcher); //必须设置
builder.setContentTitle(“我是标题”); //建议设置
builder.setContentText(“我是内容”); //建议设置
// builder.setTicker(“我是提示信息”);
// builder.setContentInfo(“我是附加信息”); //7.0以后已经过期
//创建对象.发送的就是这个对象
Notification build = builder.build();
//获取通知管理器,负责发通知、清除通知等
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//TODO :发送通知
//参数一 id 通知的id(稍后介绍意义) 参数二 通知对象
notificationManager.notify(1,build);
自定义
Notification.Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentText("内容");
builder.setContentTitle("头部");
/**
* RemoteViews是可以在别的进程(系统进程)中显示的View,并且提供了一组跨进程更新它界面的操作
* 两个参数,第一个布局所在包名
* 第二个是布局Id
* 布局文件是自己创建的,随便一个线性布局,加一个textView和ImageView即可
*/
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.simple_layout);
/**
* 由于运行在不同的进程中,所以RemoteViews无法像正常的View一样更新UI。
* RemoteViews提供了一系列的set方法,但是这些set方法只是View全部方法的子集。
*/
//都是两个参数,第一个参数相当于findViewById,第二个是设置一个值.
remoteViews.setTextViewText(R.id.rm_text_id,"666");
remoteViews.setImageViewResource(R.id.rm_image_id,R.mipmap.ic_launcher);
//builder.setContent(remoteViews);//过期
builder.setCustomContentView(remoteViews)
Notification build = builder.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(2,build);
进度条
final NotificationManager manager= (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
//TODO 2:创建构造者
final Notification.Builder builder = new Notification.Builder(this);
//TODO 3:设置属性 setSamllIcon该属性必须设置
builder.setSmallIcon(R.mipmap.ic_launcher);//设置小图标
builder.setContentTitle("我是标题");
//TODO 设置进度条
//参数一 最大值 参数二:当前进度 参数三 是否模糊
// builder.setProgress(100,50,true);
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
int progress;
@Override
public void run() {
//1.模拟下载过程
builder.setContentText("正在下载,当前进度"+progress);
builder.setProgress(100,progress,false);//确定的进度条
progress+=10;
manager.notify(6,builder.build());
if(progress==100){
//2.安装过程
builder.setContentText("正在安装");
builder.setProgress(0,0,true);//安装模糊
manager.notify(6,builder.build());
try {
Thread.sleep(7000);//模拟安装过程
} catch (InterruptedException e) {
e.printStackTrace();
}
//3.安装完成
manager.cancel(6);//取消置顶的通知
timer.cancel();
}
}
}, 0, 1000);
锁屏通知
/builde的时候
//通过 setVisibility() 方法设置即可
.setVisibility(VISIBILITY_PUBLIC)
.build();
上一篇: 关于 Abp 替换了 DryIoc 框架之后的问题
下一篇: 转:十个超级有用的PHP代码片断