it-swarm.com.de

Benutzerdefinierte Benachrichtigungstöne funktionieren in Oreo nicht

Uri sound = Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + "://" + context.getPackageName() + "/" + R.raw.notification_mp3);
            mBuilder.setSound(sound);

Ich hatte die MP3-Datei (notification_mp3.mp3) in den RAW-Ordner im Res-Ordner kopiert. Wenn die Benachrichtigung ausgelöst wird, erzeugt sie einen MP3-Sound bis zu Android Nougat , aber Standardton in Android Oreo . Ich hatte viele Seiten genannt, aber auf Android Oreo funktionierte nichts. Ich habe in Android Docs keine Änderungen bezüglich des Benachrichtigungstons in Android O und oben gefunden. Welche Änderungen sollten vorgenommen werden, damit dieser Code auch in Android O funktioniert?

10
Ashish John

Um einen Sound auf Benachrichtigungen in Oreo zu setzen, müssen Sie den Sound auf NotificationChannel und nicht auf Notification Builder selbst setzen. Sie können dies wie folgt tun

Uri sound = Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + "://" + context.getPackageName() + "/" + R.raw.notification_mp3);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

        NotificationChannel mChannel = new NotificationChannel("YOUR_CHANNEL_ID",
            "YOUR CHANNEL NAME",
            NotificationManager.IMPORTANCE_DEFAULT)

        AudioAttributes attributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                .build();

        NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, 
                context.getString(R.string.app_name),
                NotificationManager.IMPORTANCE_HIGH);

        // Configure the notification channel.
        mChannel.setDescription(msg);
        mChannel.enableLights(true);
        mChannel.enableVibration(true);
        mChannel.setSound(sound, attributes); // This is IMPORTANT


        if (mNotificationManager != null)
            mNotificationManager.createNotificationChannel(mChannel);
    }

Dadurch wird Ihren Benachrichtigungen ein benutzerdefinierter Sound zugewiesen. Wenn die App jedoch aktualisiert wird und der Benachrichtigungskanal zuvor verwendet wurde, wird sie nicht aktualisiert. Das heißt, Sie müssen einen anderen Kanal erstellen und den Sound einstellen, damit er funktioniert. Dies zeigt jedoch mehrere Kanäle im Benachrichtigungsbereich der App-Informationen Ihrer App an. Wenn Sie den Sound auf einen völlig neuen Kanal einstellen, der in Ordnung ist, der Kanal jedoch zuvor verwendet werden soll, müssen Sie den vorhandenen Kanal löschen und den Kanal neu erstellen. Um dies zu tun, können Sie so etwas tun, bevor Sie einen Kanal erstellen

if (mNotificationManager != null) {
            List<NotificationChannel> channelList = mNotificationManager.getNotificationChannels();

            for (int i = 0; channelList != null && i < channelList.size(); i++) {
                mNotificationManager.deleteNotificationChannel(channelList.get(i).getId());
            }
        }
15
Ankush

Android O kommt mit NotificationChannel, das stattdessen verwendet wird

 int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.enableVibration(true);
            notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
            assert mNotificationManager != null;
            mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
            mNotificationManager.createNotificationChannel(notificationChannel);
0
LadyEinstien

Erstellen Sie einen Kanal (ich verwende diese Methode in Application.clss, um den Kanal zu erstellen)

  public void initChannels(Context context) {
    if (Build.VERSION.SDK_INT < 26) {
        return;
    }
    NotificationManager notificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    NotificationChannel channel = new NotificationChannel("default"/*CHANNEL ID*/,
            "CHANNEL_NAME",
            NotificationManager.IMPORTANCE_DEFAULT);
    channel.setDescription("Channel description");
    assert notificationManager != null;
    notificationManager.createNotificationChannel(channel);
}

Und verwenden Sie diesen Kanal default, während Sie eine Instanz von NotificationCompat erstellen. 

 .... notificationBuilder = new NotificationCompat.Builder(this,"default") ....
0
Jay Thummar

versuche dies:

/**
 * show notification
 *
 * @param message
 */
private static void showNotification(RemoteMessage message, Context baseContext) {
    Context context = baseContext.getApplicationContext();
    NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context.getApplicationContext());
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, null)
            .setSmallIcon(R.drawable.ic_logo_xxxdpi)
            .setContentTitle(message.getData().get(TITLE))
            .setContentText(message.getData().get(BODY))
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setAutoCancel(true)
            .setVibrate(new long[]{500, 500})
            .setLights(Color.RED, 3000, 3000)
            .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
            .setContentIntent(getPendingIntent(context, message));
    managerCompat.notify(getRandom(), builder.build());
}
0
VIKAS SHARMA