Android NotificationChannel 在运行时询问多个频道的权限?

Posted

技术标签:

【中文标题】Android NotificationChannel 在运行时询问多个频道的权限?【英文标题】:Android NotificationChannel ask permission at runtime for multiple channels? 【发布时间】:2019-11-23 03:55:44 【问题描述】:

说明: 我通过 fcm 发送消息。 当用户收到消息时,会显示通知并播放特定的(在应用程序的原始文件夹中的多个音频文件中)音频文件。 要播放不同的音频消息,我只需在下面的代码中更改 jUri 中提供的文件名。

这在 android O 下工作,但在 => O 我想要什么: 1. 如何请求运行时权限播放这些不同的音频文件以获得不同的消息? 2. 另外,当我手动授予权限时,即使 jUri 文件名不同,我也会听到相同的音频消息? 3. NotificationChannel中的CHANNEL_ID和CHANNEL_NAME有什么区别? 4.“if()”下面的代码是否应该检查,在“else”部分?

以下是我的代码:

Uri jUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE+ "://" +getApplicationContext().getPackageName()+"/"+ R.raw.p);
String classnm = " FirebaseMessagingService ";

int NOTIFICATION_ID = 1;
        Log.d("loog", classnm + "747 " + ContentResolver.SCHEME_ANDROID_RESOURCE+ "://" +getApplicationContext().getPackageName()+"/"+ R.raw.p );
        Log.d("loog", classnm + "748 " + jUri );
        NotificationManager notificationManager = (NotificationManager) this.getSystemService(this.NOTIFICATION_SERVICE);


        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) 

            Log.d("loog", classnm + "690 ");
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, importance);
            mChannel.setDescription(CHANNEL_DESCRIPTION);
            mChannel.enableLights(true);
            mChannel.setLightColor(Color.RED);
            mChannel.enableVibration(true);
//            mChannel.setVibrationPattern(new long[]100, 200, 300, 400, 500, 400, 300, 200, 400);
            mChannel.setShowBadge(false);
            AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                    .build();
            mChannel.setSound(jUri, audioAttributes);

            if (notificationManager != null)
            notificationManager.createNotificationChannel(mChannel);
        
        Log.d("loog", classnm + "703 ");

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(title)
                .setSound(jUri)
                .setContentText(message);
        Log.d("loog", classnm + "710 ");

        Intent resultIntent = new Intent(this, MainActivity.class);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addParentStack(MainActivity.class);
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

        builder.setContentIntent(resultPendingIntent);

        notificationManager.notify(NOTIFICATION_ID, builder.build());
        Log.d("loog", classnm + "721 ");

【问题讨论】:

【参考方案1】:

对于您注意到的第二点,相同的声音文件在不同的频道名称上运行,只需动态传递 CHANNEL_ID 和 CHANNEL_NAME。

【讨论】:

以上是关于Android NotificationChannel 在运行时询问多个频道的权限?的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录