文档章节

NotificationManager的用法

今日竹石
 今日竹石
发布于 2015/07/30 14:48
字数 650
阅读 130
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

代码解析


1.创建通知管理器

NotificationManager 是一个系统Service,必须通过 getSystemService()方法来获取。


NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

2.创建通知

Notification:是可以设置icon、文字、提示声音、振动等等参数。 


int icon = R.drawable.wlicon;

        long when = System.currentTimeMillis();//时间

//      创建通知栏的显示

        CharSequence tickerText = "未读消息提醒";

        Notification notification = new Notification(icon, tickerText, when);

        notification.defaults |= Notification.DEFAULT_LIGHTS;  // 通知灯光

        notification.defaults |= Notification.DEFAULT_VIBRATE; // 震动

        notification.flags |= Notification.FLAG_NO_CLEAR;   // 通知不可以清除

//      notification.flags = Notification.FLAG_AUTO_CANCEL;  // 通知可以清除

//      notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // 系统默认铃声

//      notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");// 播放自定义的铃声

//      notification.flags |= Notification.FLAG_INSISTENT; // 声音一直响到用户相应,就是通知会一直响起,直到你触碰通知栏的时间就会停止

//      创建后在状态栏中通知的内容

        Context context = droidGap.getApplicationContext();

        CharSequence contentTitle = "未读消息提醒";

        CharSequence contentText = "您有" + Quantity + "条未读消息,请及时读取。";

//      点击后打开的项目   创建一个Intent

        Intent notificationIntent = new Intent(droidGap, MainActivity.class);

        PendingIntent contentIntent = PendingIntent.getActivity(droidGap, 0, notificationIntent, 0);

        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

        notificationManager.notify(NOTIFICATION_ID, notification);

完整例子


这里没有使用通知栏的响铃是因为用户下拉通知栏的时间那个响铃会停止,我需求是需要一直播放。所以使用了MediaPlayer


/**

     * 创建通知栏

     * @param Quantity  数量

     * @param player MediaPlayer  播放声音

     */

    public void createNotification(String Quantity, MediaPlayer player) {

//      创建通知栏

        NotificationManager notificationManager = (NotificationManager) droidGap.getSystemService(Context.NOTIFICATION_SERVICE);

        int icon = R.drawable.wlicon;

        long when = System.currentTimeMillis();

//      创建通知栏的显示

        CharSequence tickerText = "未读消息提醒";

        Notification notification = new Notification(icon, tickerText, when);

        notification.defaults |= Notification.DEFAULT_LIGHTS;  // 通知灯光

        notification.defaults |= Notification.DEFAULT_VIBRATE; // 震动

        notification.flags |= Notification.FLAG_NO_CLEAR;   // 通知不可以清除

//      notification.flags = Notification.FLAG_AUTO_CANCEL;  // 通知可以清除

//      notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // 系统默认铃声

//      notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");// 播放自定义的铃声

//      notification.flags |= Notification.FLAG_INSISTENT; // 声音一直响到用户相应,就是通知会一直响起,直到你触碰通知栏的时间就会停止

//      创建后在状态栏中通知的内容

        Context context = droidGap.getApplicationContext();

        CharSequence contentTitle = "未读消息提醒";

        CharSequence contentText = "您有" + Quantity + "条未读消息,请及时读取。";

//      点击后打开的项目   创建一个Intent

        Intent notificationIntent = new Intent(droidGap, MainActivity.class);

        PendingIntent contentIntent = PendingIntent.getActivity(droidGap, 0, notificationIntent, 0);

        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

        notificationManager.notify(NOTIFICATION_ID, notification);

        try {

            if (Integer.parseInt(Quantity) == 0 && player.isPlaying()) {

                player.reset();  // 到初始化状态,这里需要判断是否正在响铃,如果直接在开启一次会出现2个铃声一直循环响起,您不信可以尝试

            } else if (!player.isPlaying()) {

                NotificationUtil.ring(player);

            }

        } catch (Exception e) {

            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.

        }

    }

 

    /**

     * 一直响铃

     * @param droidGap

     * @param player

     * @return

     * @throws Exception

     * @throws IOException

     */

    private static MediaPlayer ring(MediaPlayer player) throws Exception, IOException {

        Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

//      MediaPlayer player = new MediaPlayer();

        player.setDataSource(droidGap, alert);

        final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

        if (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) != 0) {

            player.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

            player.setLooping(true);

            player.prepare();

            player.start();

        }

        return player;

    }


© 著作权归作者所有

今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
私信 提问
Notification的使用

创建一个类专门管理Notification,一个方法显示,一个方法取消! public class NotificationManager { Activity context; public NotificationManager(Activity context) { this.context=con......

新根
2015/07/01
154
0
Notification与NotificationManager

Notification是要发出的通知,NotificationManager用来发出和取消通知 大概的步骤: 1.获得系统服务NotificationManager 2.实例化Notification 并设置其属性 3.调用setLatestEventInfo方法在...

泡泡爸爸
2013/03/21
305
1
Notification 的进度条 简单展示

Notification的原生实现基本可以包括: 使用getSystemService(context.Notificationservice) 获取 Notificationmanager 的引用 使用Notification Builder来构建 Notification 使用前面 的 No......

疯子v1
2015/08/31
165
0
第88章、系统服务之NOTIFICATION_SERVICE服务(从零开始学Android)

Notification通知将一个图标(包含一条可选的提示文本信息)填加到系统的状态栏(一般来说,Android手机的状态栏是在顶部,非底部,要注意噢)中,并将一条展开信息添加到通知窗口中。当用户...

simpower
2014/09/01
960
0
Notification的基本使用

Notification是显示在手机状态的通知,一般显示手机当前的网络状态、电池状态、时间等。 设置Notification涉及到两个类,一个类是NotificationManager,一个类是Notification。可以这样理解这...

summerpxy
2013/11/11
620
1

没有更多内容

加载失败,请刷新页面

加载更多

ForkJoinPool线程池

1. 拆分线程池的使用场景是什么? 答: 是对一组连续的数据进行耗时操作,例如 一个 大小为 10000 的集合 进行操作。 例子: 对1000万个数据进行排序,那么会将这个任务分割成两个500万的排序...

杨凯123
10分钟前
2
0
在多列上使用group by

我理解GROUP BY x的观点 但GROUP BY x, y如何运作的,它是什么意思? #1楼 Group By X表示将所有具有相同X值的组合放入一组中 。 Group By X, Y表示将所有具有相同值的值放在一个组中的X和Y...

技术盛宴
26分钟前
3
0
线程池ThreadPoolExecutor的内部类Worker的感想和思考

Worker依然是一个Runnable,封装了一个创建自己的原因对象,就是firstTask变量,和自己将要执行的所在线程thread变量。 thread成员变量可以直接被外部类ThreadPoolExecutor所获得,当调用add...

萧默
今天
3
0
Git推送错误“ [[远程拒绝]主机->主机(分支当前已签出)”)

昨天,我发布了一个有关如何将Git存储库从我的一台计算机克隆到另一台计算机的问题 , 如何从另一台计算机“ git clone”? 。 现在,我可以成功地将Git存储库从源(192.168.1.2)克隆到目标...

javail
今天
4
0
Selenium 4.0 Alpha更新日志

早在2018年8月,整个测试自动化社区就发生了一件重大新闻:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重要更新。 Selenium 4.0 Alpha版...

八音弦
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部