web-dev-qa-db-ja.com

Android Oreoは通知のためにカスタムサウンドを再生しません

API> 26の通知にカスタムサウンドを追加しようとしています。以下はコードです

NotificationChannel notificationChannel = new NotificationChannel("channel id","channel name",NotificationManager.IMPORTANCE_HIGH);
mNotificationManager.createNotificationChannel(notificationChannel);
AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                    .build();
notificationChannel.setSound(Uri.parse("Android.resource://" + BuildConfig.APPLICATION_ID + "/raw/beep"),audioAttributes);

ここでの問題は、アセットからビープ音を再生するのではなく、デバイスのデフォルトのピアノ音を再生することです。着信音マネージャーを使用することはできませんが、通知音はデフォルトではなく指定されたものでなければならないという常識的な統計情報です。

API <= 26で正常に動作します

9
Mehroze Yaqoob

最後に、自分で解決策を見つけることができました。以下はコードです

NotificationManager mNotificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
 if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {

            if(notificationSoundUri != null){
                // Changing Default mode of notification
                notificationCompatBuilder.setDefaults(Notification.DEFAULT_VIBRATE);

                // Creating an Audio Attribute
                AudioAttributes audioAttributes = new AudioAttributes.Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .setUsage(AudioAttributes.USAGE_ALARM)
                        .build();

                // Creating Channel
                NotificationChannel notificationChannel = new NotificationChannel(context.getString(R.string.channel_id_prayers),context.getString(R.string.channel_name_prayers),NotificationManager.IMPORTANCE_HIGH);
                notificationChannel.setSound(notificationSoundUri,audioAttributes);
                mNotificationManager.createNotificationChannel(notificationChannel);
            }
}
mNotificationManager.notify(0, notificationCompatBuilder.build());
11
Mehroze Yaqoob