Day3:双击退出与Notitfcation 通知

双击退出
代码
 //双击退出
    @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);
    }
简单通知
代码
public void click(View view) {
        //创建构造者
        Notification.Builder builder = new Notification.Builder(this);
        //设置属性   setSamllIcon该属性必须设置
        builder.setSmallIcon(R.mipmap.ic_launcher); //必须设置
        builder.setContentTitle("国庆将至"); //建议设置
        builder.setContentText("国庆假期倒计时:1天"); //建议设置

        //通知的列表模式样式
//        Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
//        inboxStyle.addLine("坐公交走");
//        inboxStyle.addLine("拼车走");
//        builder.setStyle(inboxStyle);

        //通知的大图模式样式
        Notification.BigPictureStyle bigPictureStyle = new Notification.BigPictureStyle();
        bigPictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));
        builder.setStyle(bigPictureStyle);

        builder.setPriority(Notification.PRIORITY_MAX);//设置优先级为最高
        builder.setDefaults(Notification.DEFAULT_ALL);
//        Intent intent = new Intent(MainActivity.this, MainActivity.class);
//        PendingIntent activities = PendingIntent.getActivity(MainActivity.this, 100, intent,0);
//        builder.setContentIntent(activities);
        builder.setAutoCancel(true);
        //创建对象
        Notification build = builder.build();
        //获取通知管理器,负责发通知、清除通知等
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        //参数一:id 通知的id(稍后介绍意义)   参数二:通知对象
        notificationManager.notify(1,build);



    }
进度条通知
代码
 public void click1(View view) {
        final NotificationManager manager= (NotificationManager)
                getSystemService(Context.NOTIFICATION_SERVICE);
        final Notification.Builder builder = new Notification.Builder(this);
        //设置属性   setSamllIcon该属性必须设置
        builder.setSmallIcon(R.mipmap.ic_launcher); //必须设置
        builder.setContentTitle("软件下载"); //建议设置

        timer = new Timer();
        timer.schedule(new TimerTask() {
            int progress = 0;
            @Override
            public void run() {
                builder.setContentText("正在下载,当前进度"+progress);
                builder.setProgress(100,progress,false);//下载过程使用精确进度条来显示进度
                progress+=20;//步长值
                manager.notify(1,builder.build());
                if(progress==100) {
                    //进度达到100进入安装过程
                    builder.setContentText("正在安装");
                    builder.setProgress(0, 0, true);//安装过程使用模糊进度条
                    manager.notify(1, builder.build());
                    try {
                        Thread.sleep(3000);//线程休眠,模拟安装过程
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //服务结束,timer结束
                    manager.cancel(1);
                    timer.cancel();
                }
            }
        },1,1000);
    }
多条通知
代码
private void groupNotification() {
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification.Builder mBuilder0 = new Notification.Builder(this);
        Notification.Builder mBuilder1 = new Notification.Builder(this);
        Notification.Builder mBuilder2 = new Notification.Builder(this);
        Notification.Builder mBuilder3 = new Notification.Builder(this);

        //消息分组属性,group相同才能分到一组
        mBuilder0.setGroup("2");
        mBuilder0.setSmallIcon(R.mipmap.ic_launcher);
        //被设置setGroupSummary为true的消息会隐藏内容,其内容会显示另外分组成员信息.
        mBuilder0.setGroupSummary(true);
        mBuilder0.setContentText("有志者");
        mBuilder0.setContentTitle("事竟成");

        mBuilder1.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder1.setContentText("一二三四五");
        mBuilder1.setContentTitle("上山打老虎");

        mBuilder2.setGroup("2");
        mBuilder2.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder2.setContentText("苦心人");
        mBuilder2.setContentTitle("天不负");

        mBuilder3.setGroup("2");
        mBuilder3.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder3.setContentText("卧薪尝胆");
        mBuilder3.setContentTitle("踏高薪路");


        manager.notify(0,mBuilder0.build());
        manager.notify(1,mBuilder1.build());
        manager.notify(2,mBuilder2.build());
        manager.notify(3,mBuilder3.build());

    }
自定义通知
代码
private void userNotification() {
        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.custom_layout);

        //不能直接设置,依靠方法来修改控件内容:两个参数 控件ID、控件内容
        remoteViews.setTextViewText(R.id.t1,"为啥推人小女孩儿?");
        remoteViews.setTextViewText(R.id.t2,"她扒拉我!");
        remoteViews.setImageViewResource(R.id.pic,R.mipmap.ic_launcher);

        builder.setCustomContentView(remoteViews);
        Notification build = builder.build();

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(2,build);

    }
整体代码

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:gravity="center"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="Day3:双击退出与Notitfcation 通知"
        android:textSize="25sp"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="双击退出"
        android:layout_marginTop="40dp"
        android:onClick="click"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送一个简单通知"
        android:onClick="click"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送一个进度条通知"
        android:onClick="click1"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="多条通知"
        android:onClick="click2"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="自定义通知"
        android:onClick="click3"
        />

</LinearLayout>

MainActivity:

package com.example.myapplication;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.RemoteViews;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
    private long exitTime = 0;
    private Notification.Builder builder;
    private NotificationManager manager;
    private Timer timer;
    @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 ){
            //判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出。
            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);
    }
    public void click(View view) {
        //创建构造者
        Notification.Builder builder = new Notification.Builder(this);
        //设置属性   setSamllIcon该属性必须设置
        builder.setSmallIcon(R.mipmap.ic_launcher); //必须设置
        builder.setContentTitle("国庆将至"); //建议设置
        builder.setContentText("国庆假期倒计时:1天"); //建议设置

        //通知的列表模式样式
//        Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
//        inboxStyle.addLine("坐公交走");
//        inboxStyle.addLine("拼车走");
//        builder.setStyle(inboxStyle);

        //通知的大图模式样式
        Notification.BigPictureStyle bigPictureStyle = new Notification.BigPictureStyle();
        bigPictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));
        builder.setStyle(bigPictureStyle);

        builder.setPriority(Notification.PRIORITY_MAX);//设置优先级为最高
        builder.setDefaults(Notification.DEFAULT_ALL);
//        Intent intent = new Intent(MainActivity.this, MainActivity.class);
//        PendingIntent activities = PendingIntent.getActivity(MainActivity.this, 100, intent,0);
//        builder.setContentIntent(activities);
        builder.setAutoCancel(true);
        //创建对象
        Notification build = builder.build();
        //获取通知管理器,负责发通知、清除通知等
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        //参数一:id 通知的id(稍后介绍意义)   参数二:通知对象
        notificationManager.notify(1,build);



    }
    public void click1(View view) {
        final NotificationManager manager= (NotificationManager)
                getSystemService(Context.NOTIFICATION_SERVICE);
        final Notification.Builder builder = new Notification.Builder(this);
        //设置属性   setSamllIcon该属性必须设置
        builder.setSmallIcon(R.mipmap.ic_launcher); //必须设置
        builder.setContentTitle("软件下载"); //建议设置

        timer = new Timer();
        timer.schedule(new TimerTask() {
            int progress = 0;
            @Override
            public void run() {
                builder.setContentText("正在下载,当前进度"+progress);
                builder.setProgress(100,progress,false);//下载过程使用精确进度条来显示进度
                progress+=20;//步长值
                manager.notify(1,builder.build());
                if(progress==100) {
                    //进度达到100进入安装过程
                    builder.setContentText("正在安装");
                    builder.setProgress(0, 0, true);//安装过程使用模糊进度条
                    manager.notify(1, builder.build());
                    try {
                        Thread.sleep(3000);//线程休眠,模拟安装过程
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //服务结束,timer结束
                    manager.cancel(1);
                    timer.cancel();
                }
            }
        },1,1000);
    }

    public void click2(View view) {
        groupNotification();
    }
    private void groupNotification() {
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification.Builder mBuilder0 = new Notification.Builder(this);
        Notification.Builder mBuilder1 = new Notification.Builder(this);
        Notification.Builder mBuilder2 = new Notification.Builder(this);
        Notification.Builder mBuilder3 = new Notification.Builder(this);

        //消息分组属性,group相同才能分到一组
        mBuilder0.setGroup("2");
        mBuilder0.setSmallIcon(R.mipmap.ic_launcher);
        //被设置setGroupSummary为true的消息会隐藏内容,其内容会显示另外分组成员信息.
        mBuilder0.setGroupSummary(true);
        mBuilder0.setContentText("有志者");
        mBuilder0.setContentTitle("事竟成");

        mBuilder1.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder1.setContentText("一二三四五");
        mBuilder1.setContentTitle("上山打老虎");

        mBuilder2.setGroup("2");
        mBuilder2.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder2.setContentText("苦心人");
        mBuilder2.setContentTitle("天不负");

        mBuilder3.setGroup("2");
        mBuilder3.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder3.setContentText("卧薪尝胆");
        mBuilder3.setContentTitle("踏高薪路");


        manager.notify(0,mBuilder0.build());
        manager.notify(1,mBuilder1.build());
        manager.notify(2,mBuilder2.build());
        manager.notify(3,mBuilder3.build());

    }

    public void click3(View view) {
        userNotification();
    }
    private void userNotification() {
        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.custom_layout);

        //不能直接设置,依靠方法来修改控件内容:两个参数 控件ID、控件内容
        remoteViews.setTextViewText(R.id.t1,"为啥推人小女孩儿?");
        remoteViews.setTextViewText(R.id.t2,"她扒拉我!");
        remoteViews.setImageViewResource(R.id.pic,R.mipmap.ic_launcher);

        builder.setCustomContentView(remoteViews);
        Notification build = builder.build();

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(2,build);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值