Android Notification 以及 通知铃音使用

Android Notification 以及 通知铃音使用

上一篇文章讲了手机震动的使用.

本篇继续讲解铃音的使用,并且在讲下通知消息的使用.

1:通知消息的使用

代码如下:

java 复制代码
    public static void notice(Context context) {
        try {
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("Notification test")
                    .setContentText("This is a notification with LED lights")
                    .setContentInfo("This is a notification with LED lights")
                    .setDefaults(Notification.DEFAULT_LIGHTS)
                    .setPriority(Notification.PRIORITY_HIGH)
                    .setVibrate(new long[]{0, 1000, 500, 2000})
                    .setLights(Color.RED, 300, 200)// 设置LED灯光效果的颜色、亮起时长和熄灭时长
                    .setChannelId(context.getPackageName())
                    .setAutoCancel(true);

            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        context.getPackageName(),
                        "Notification msg2",
                        NotificationManager.IMPORTANCE_HIGH

                );
                // 设置通知出现时声音,默认通知是有声音的
                channel.setSound(null, null);
                channel.enableLights(true);
                channel.setLightColor(Color.RED);
                // 设置通知出现时的震动(如果 android 设备支持的话)
                channel.enableVibration(true);
                channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
                channel.setVibrationPattern(new long[]{0, 1000, 500, 2000});
                notificationManager.createNotificationChannel(channel);
            }
            new Handler().postDelayed(() -> {
//                    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//                    @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
//                            | PowerManager.ACQUIRE_CAUSES_WAKEUP
//                            | PowerManager.ON_AFTER_RELEASE,"MyWakeLock");
//                    wakeLock.acquire();
                notificationManager.notify(2014, builder.build());
            },2000);
        } catch (Throwable e) {
            Log.e(TAG, "noticeLED: ",e );
        }
    }

Android O以上需要实现NotificationChannel ,并通过createNotificationChannel 设置.

2: 通知铃音

java 复制代码
  public static void noticeVoice(Context context) {
        final MediaPlayer mp = new MediaPlayer();
        try {
            mp.setDataSource(context, RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION));
            mp.setLooping(false);
            mp.setAudioStreamType(getRingType(context));
            mp.prepare();
            mp.setOnCompletionListener(mp1 -> {
                mp1.release(); // 播放完毕后自动释放资源。
            });
            mp.start();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
    /**
     * 控制当前响铃类型
     */
    private static int getRingType(Context context) {
        try {
            AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            int current = audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION);
            switch (current) {
                case 0:
                    return AudioManager.STREAM_RING;
                default:
                    return AudioManager.STREAM_NOTIFICATION;
            }
        } catch (Throwable e) {
            Log.e(TAG, "getRingType: ", e);
        }
        return AudioManager.STREAM_NOTIFICATION;
    }
相关推荐
2601_962065495 分钟前
PHP For 循环
android·java·php
码农coding27 分钟前
android12 WindowManagerService窗口的添加过程
android
小小测试开发31 分钟前
RAG评测指标实战:忠实度、上下文精确率/召回率从原理到CI落地
android·人工智能·spring boot·ci/cd
Dovis(誓平步青云)2 小时前
同一条路线在手机和平板上怎样换一种排版
android·开发语言·数据库·智能手机·音视频
firstacui2 小时前
Mysql调优
android·mysql·adb
程序员-Benothing2 小时前
什么是 MySQL 的主从同步机制?它是如何实现的?
android·数据库·mysql
Android打工人2 小时前
c++ 、java 融为一体2,c++ 实例化Android虚拟机直接运行java,c,java 一个进程号
android·java·c++
IT毕设实战小研3 小时前
基于安卓的考研资讯系统设计与实现
android·大数据·vue.js·爬虫·python·考研·课程设计
Mr数据杨11 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
●VON11 小时前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑