双击退出和Notification通知
一:双击退出
实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。
判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出。
代码
public class MainActivity extends AppCompatActivity {
private long firstTime = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
//判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出。
if (System.currentTimeMillis() - firstTime>2000){
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
firstTime = System.currentTimeMillis();
return true;
}
}else{
finish();//结束当前Activity
}
return super.onKeyDown(keyCode, event);
}
二:常用的通知
定义:是在系统的通知栏中呈现多样式持久性消息的类
1、在通知栏显示
2、消息持久性
3、种类多样性
用处:
显示客户端的推送消息(如有新版本发布、广告、推荐新闻等)
显示正在进行的事物(如音乐播放器、版本更新时候的下载进度等)
显示接收到短消息,即时消息等信息(如QQ、微信、新浪、短信)
常用方法:
setSmallIcon() 与 setLargeIcon()
当 setSmallIcon() 与 setLargeIcon() 同时存在时, smallIcon 显示在通知的右下角, largeIcon 显示在左侧;当只设置 setSmallIcon() 时, smallIcon 显示在左侧。
1.普通通知
//发送一个最简单的通知(无交互)
public void Notification(View view) {
//创建构造者
Notification.Builder builder = new Notification.Builder(this);
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);
notificationManager.notify(1,build);
}
2.自定义通知
其实就是加载一个布局. 加载布局用到了 RemoteViews 代码中有详细注释.
//自定义通知
public void customNotification(View view) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//创建构造者
Notification.Builder builder = new Notification.Builder(this);
//设置属性
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle("这是标题");
builder.setContentText("这是内容");
/**
* RemoteViews是可以在别的进程(系统进程)中显示