Android通知提醒Notification

Notification说明

1,软件希望向用户进行一些提醒操作时,可以采用标题栏提醒通知的形式(Android标准通知机制);

2,当有通知出现时,会在标题栏出现一个小图标,有些通知可以发送声音,震动;

3,当用户通过手指,从标题栏向下拉动的时候,会出现另外一个窗口,显示的就是系统中所有的信息;

4,一般内容,当用户点击时可以进入相应的程序界面;

 

public class MainActivity extends Activity implements Runnable{
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    /**
     * 点击发送普通通知
     * @param view
     */
    public void btnSend(View view) {
        //创建Notification
        //需要使用NotificationCompatBuilder
        //需要导入android support v4包
        //是一个兼容包,需要从AndroidSDK导入
        NotificationCompat.Builder builder= new NotificationCompat.Builder(this);
        //2,设置图片小图标,在状态栏上面系那是的小图标
        //必须设置,否则抛异常

        builder.setSmallIcon(R.drawable.ic_launcher)//图标
                .setContentTitle("标题")//标题
                .setContentText("我是通知");//通知

        //可选属性
        //设置通知默认的状态,包括:声音,震动,呼吸灯
        //使用DEFAULT_VIBRATE需要设置权限
        builder.setDefaults(NotificationCompat.DEFAULT_VIBRATE|NotificationCompat.DEFAULT_SOUND);//可选值NotificationCompat.DEFAULT_xxx

        builder.setNumber(5);

        //3,创建通知
        Notification n = builder.build();

        //4,NotificationManager 来进行通知的发送
        NotificationManagerCompat managerCompat = NotificationManagerCompat.from(this);
        managerCompat.notify(999,n);
    }


    private int progress;//用于表示进度信息;
    private Thread downloadThread;//下载线程,用于刷新通知进度
    /**
     * 带有进度的通知
     * @param view
     */
    public void btnSendProgressNotification(View view) {
        if(downloadThread==null||!downloadThread.isAlive()){
            progress=0;
            downloadThread = new Thread(this);
            downloadThread.start();
        }
    }
    /*******************************************/
    @Override
    public void run() {
        NotificationManagerCompat managerCompat =
                NotificationManagerCompat.from(this);
        while(progress<=100){
            // 1,NotificationCompat.Builder最后创建
            NotificationCompat.Builder builder =
                    new NotificationCompat.Builder(this);
            //2,设置必选属性
            builder.setSmallIcon(R.drawable.ic_launcher)
                    .setContentTitle("下载中...")
                    .setContentText("正在下载");

            //可选属性,设置进度 参数1:进度最大值;参数2:当前进度;参数3:不确认的
            builder.setProgress(100,progress,false);

            //3,创建通知
            Notification n = builder.build();


            managerCompat.notify(998,n);

            progress+=10;
            try {
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        //managerCompat.cancel(998);//当进度大于100循环退出,可以取消通知

        //真是的应用应该是显示一个通知,下载完成
        NotificationCompat.Builder builder =
                new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("下载完成")
                .setContentText("打开文件");
        //todo  添加通知打开的操作
        //设置pendingIntent内部包裹Intent就可以;

        Intent intent = new Intent(this,DownloadListActivity.class);
        //!!因为这个intent有可能在启动的时候,自身的程序已经退出了
        //Activity的任务栈,已经没有,因此需要设置启动标志,来设置
        intent.setFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TASK//新建任务栈,对于程序退出
                |Intent.FLAG_ACTIVITY_CLEAR_TOP //对应程序还在运行的情况
        );
        //创建PendingIntent的实例
        /**
         * 参数1:Context
         * 参数2:rquestCode 类似于StartActivityForResult
         * 参数3:!!Intent用于启动Activity
         * 参数4:标志位
         */
        PendingIntent pendingIntent = PendingIntent.getActivity(this,888,intent,PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(pendingIntent);//设置通知点击的时候设置的操作
        Notification n = builder.build();
        managerCompat.notify(998,n);
    }
}
posted @ 2015-11-28 09:05  wmkill  阅读(1248)  评论(0编辑  收藏  举报