通知Notification

状态栏通知的简单创建

注:如果下面的发送通知和发送导航通知是跳转到同一个界面,那么可能会发生覆盖问题。

notification跳转的Activity分为常规的和特定的,常规的就是在其他页面也可以跳转进去的;特定的是只用来显示通知的其他内容的Activity

可以创建一个Activity,写上几个Button来手动发送通知

以下方法里一样的类,如(NotificationCompat.Builder、NotificationManager等,可以提出来设为全局的)
(一)发送通知(封装在一个方法里)

public void sendNotification(){
        /**构造通知notification的界面*/
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.ic_launcher); //小图标
        builder.setContentTitle(getString(R.string.notification_title)); //标题,一般定义在String文件里
        builder.setContentText(getString(R.string.notification_content)); //内容
        builder.setTicker(getString(R.string.notification_content)); //滚动的内容
        builder.setAutoCancel(true); //点击后自动消失

        /**通知行为*/
        Intent intents = new Intent(this,MediaPlayerScanOneActivity.class);//点击通知时要跳转的Activity
//启动的特定Activity在一个新的任务栈中
intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intents, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(pendingIntent);

        /**发送通知notification*/
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        int notificationId = 1;
        Notification notification = builder.build();
        manager.notify(notificationId, notification);
    }

(二)更新通知

public void updateNotification(){
        //更新哪个通知,就用哪个通知的notificationId

        /**构造通知notification的界面*/
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.kg_ic_navigation_game); //小图标
        builder.setContentTitle("双十一"); //标题
        builder.setContentText("抢购"); //内容
        builder.setTicker("抢购"); //滚动的内容
        builder.setAutoCancel(true); //点击后自动消失

        /**通知行为*/
        Intent intents = new Intent(this,MusicPlayerMainActivity.class);//点击通知时要跳转的Activity
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intents, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(pendingIntent);

        /**发送通知notification*/
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        int notificationId = 1;
        Notification notification = builder.build();
        manager.notify(notificationId, notification);
    }

(三)清除通知

public void clearNotification(){
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.cancel(1);//消除某个ID的通知
//      manager.cancelAll();//消除所有通知
    }

(四)发送导航通知(返回时,返回到通知Activity的父类Activity)

public void sendNavigationNotification(){
        /**发送导航通知*/
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.kg_ic_navigation_more_ringtone);
        builder.setContentTitle("降价通知");
        builder.setContentText("全场不要钱,快来抢!!");
        builder.setTicker("降价通知");
        builder.setAutoCancel(true);

        /**通知行为*/
        Intent intents = new Intent(this,MediaPlayerScanOneActivity.class);//点击通知时要跳转的Activity
        //构造一个返回栈
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addParentStack(MediaPlayerScanOneActivity.class);//同上
        stackBuilder.addNextIntent(intents);

        PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(pendingIntent);

        /**发送通知*/
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
        int notificationId = 2;
        Notification notification = builder.build();
        manager.notify(notificationId,notification);

    }

并且在AndroidManifest里写上要跳转的Activity的父类Activity

<activity android:name=".MediaPlayerScanOneActivity"
            android:parentActivityName=".MusicPlayerMainActivity"></activity>

下载进度的通知

这里写图片描述

public void download(){
        /**构造通知notification的界面*/
        final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.kg_scanning_view_scan); //小图标
        builder.setContentTitle("下载文件"); //标题,一般定义在String文件里
        builder.setContentText("开始下载文件"); //内容
        builder.setTicker("开始下载文件"); //滚动的内容
        builder.setAutoCancel(true); //点击后自动消失

        /**发送通知notification*/
        final NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        final int notificationId = 3;
        Notification notification = builder.build();
        manager.notify(notificationId, notification);

        //为了不让主线程停顿,在子线程里刷新
        new Thread(new Runnable() {

            @Override
            public void run() {

                for (int i = 1; i <= 100; i++) {

//                  builder.setProgress(max, progress, indeterminate); 
//                  max:最大进度    progress:当前进度   indeterminate:false为确定的,true为不确定的(就是不知道什么时候完)

                    builder.setProgress(100, i, false);

//                  builder.setProgress(0, 0, true);//设置进度为不确定模式

                    builder.setContentText("下载文件中...");
                    manager.notify(notificationId, builder.build());//刷新通知界面

                    try {
                        Thread.sleep(100); //间隔100毫秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                builder.setProgress(0, 0, false);
                builder.setContentText("下载完成");
                manager.notify(notificationId, builder.build());//刷新通知界面
            }
        }).start();

    }

BigView的Notification(下面多加了按钮),当上面还有其他通知时,下面的按钮会收起隐藏

这里写图片描述

public void bigViewNotification(){
        /**构造通知notification的界面*/
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.kg_scanning_view_scan); //小图标
        builder.setContentTitle("音乐播放器"); //标题,一般定义在String文件里
        builder.setContentText("无聊听听歌"); //内容
        builder.setTicker("音乐播放器"); //滚动的内容
        builder.setAutoCancel(true); //点击后自动消失
        builder.setStyle(new NotificationCompat.BigTextStyle().bigText("无聊听听歌"));

        /**播放动作*/
        Intent playIntent = new Intent(this,MediaPlayerMusicService.class);
        playIntent.putExtra("MUSIC_PATH", "file://"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)+"/xxx.mp3");
        PendingIntent playPendingIntent = PendingIntent.getService(this, 0, playIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//      playIntent.setAction(action); //如果两个动作想要启动的是同一个Service或其他东西,要传参就必须要设置Action来区分Intent
        builder.addAction(R.drawable.widget_play_button_default, "播放", playPendingIntent);

        /**暂停动作*/
        Intent pauseIntent = new Intent(this,MediaPlayerMusicService.class);
        playIntent.putExtra("MUSIC_PATH", "file://"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)+"/xxx.mp3");
        PendingIntent pausePendingIntent = PendingIntent.getService(this, 0, pauseIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//      playIntent.setAction(action);
        builder.addAction(R.drawable.widget_pause_button_default, "暂停", pausePendingIntent);

        /**发送通知notification*/
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.notify(4, builder.build());
    }

自定义通知

这里写图片描述

public void MyNotification(){
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        //自定义View
        RemoteViews views = new RemoteViews(getPackageName(), R.layout.myself_notification_layout);
        //自定义通知必须要设置icon,其他不设置不影响
        builder.setSmallIcon(R.drawable.ic_launcher);
        builder.setTicker("启动酷狗音乐");

        Intent preIntent = new Intent(this,MediaPlayerMusicService.class);
        PendingIntent prePendingIntent = PendingIntent.getService(this, 0, preIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        //通知里的自定义按键的监听
        views.setOnClickPendingIntent(R.id.notification_music_pre, prePendingIntent);
//      views.setOnClickPendingIntent(R.id.notification_music_play, pendingIntent);
//      views.setOnClickPendingIntent(R.id.notification_music_next, pendingIntent);

        builder.setContent(views);

        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.notify(5,builder.build());
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值