2017-09-10 3 views
2

Ich habe eine vorhandene Anwendung, die einen akustische Benachrichtigung Sound zu erzeugen, selbst war in der Lage, wenn das Gerät sein Ruftonlautstärke unter Verwendung des Alarm Audio-Stream zum Schweigen gebracht hatte (unter der Annahme, die Alarmlautstärke war nicht Null). Das hat gut funktioniert auf Android 7.1.2Akustische Meldungen Alarmstrom zu verwenden, wenn Ruftonlautstärke zum Schweigen gebracht wird (Android Oreo)

Nach meinem Gerät Oreo (8.0.0) aktualisieren, die Benachrichtigung nicht mehr hörbar es sei denn, die Ruftonlautstärke nicht Null ist. Die App war unverändert.

Also mein Versuch, dies zu beheben, war, gegen Oreo (SDK 26) APIs neu zu kompilieren und die neuen NotificationChannel Sachen nur um zu sehen, wenn das half, was es nicht tat.

Beachten Sie, dass dieser Code innerhalb von Service ausgeführt wird.

Hier ist ein Codeauszug:

int importance = NotificationManager.IMPORTANCE_MAX; 
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 

NotificationChannel mChannel = new NotificationChannel("channel1", "Alarms", importance); 
mChannel.setDescription("Alarms that alert you immediately"); 
mChannel.enableLights(true); 

mChannel.enableVibration(true); 
mChannel.setSound(defaultSoundUri, 
    new AudioAttributes.Builder() 
     .setUsage(AudioAttributes.USAGE_ALARM) 
     .setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED) 
     .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) 
    .build() 
); 

notificationManager.createNotificationChannel(mChannel); 

Notification.Builder notificationBuilder = new Notification.Builder(this,"channel1") 
     .setSmallIcon(R.drawable.ic_stat_ic_notification) 
     .setContentTitle("Alarm Message") 
     .setContentText(messageBody) 
     .setAutoCancel(true) 
     .setSound(defaultSoundUri, new AudioAttributes.Builder() 
       .setUsage(AudioAttributes.USAGE_ALARM) 
       .setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED) 
       .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) 
       .build()) 
     .setContentIntent(pendingIntent) 
     .setCategory(Notification.CATEGORY_ALARM) 
     .setPriority(Notification.PRIORITY_MAX); 


Notification n = notificationBuilder.build(); 
n.flags = n.flags | Notification.FLAG_INSISTENT; 
notificationManager.notify(0 /* ID of notification */, n); 

Irgendwelche Ideen?

Antwort

0

Ich hatte auch mit diesem Problem zu kämpfen. Ich habe nicht herausgefunden, warum dies passiert, aber ich habe dieses Problem mit der MediaPlayer umgehen. Ich entfernte den Teil, in dem der Ton der Meldung hinzugefügt und ersetzt diesen Teil mit diesem:

 Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     final MediaPlayer mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setDataSource(this.getApplicationContext(), ringtoneUri); 
     mediaPlayer.setAudioAttributes(new AudioAttributes.Builder().setLegacyStreamType(AudioManager.STREAM_ALARM).build()); 
     mediaPlayer.setLooping(false); 
     mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 
      public final void onCompletion(MediaPlayer it) { 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
      } 
     }); 
     mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
      public final void onPrepared(MediaPlayer it) { 
       mediaPlayer.start(); 
      } 
     }); 
     mediaPlayer.prepareAsync(); 
0

ich ähnliches Problem hatte, aber es war auf Android 7.1.1

für mich die Lösung Aufspringen war folgende Zeile

.setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED) 

ich habe gesucht für eine Erklärung zu entfernen, warum dieses Flag Werk zu entfernen, aber ich habe keine Informationen, was FLAG_AUDIBILITY_ENFORCED tut, mit Ausnahme der Beschreibung von Entwicklerdokumentation, sagt

gefunden

Flag, das ein Verhalten definiert, bei dem die Hörbarkeit des Tons vom System gewährleistet wird.

Verwandte Themen