Próbuję programowo podnieść głośność do maksymalnej wartości strumienia STREAM_MUSIC
, ale mam, gdy robię "Wysyłanie komunikatu do obsługi po nieważnym wątku". Wydaje się również, że nie zwiększa to objętości w 100% czasu, chociaż kiedy dostanę ten błąd, podniesie go NAJCZĘŚCIEJ z biegiem czasu.Menedżer zarządzania dźwiękiem wysyłający wiadomość do programu obsługi w martwym wątku?
Kod jest:
System.out.println("Maximum volume for this stream is: "+maxstreamvol+" and it used to be set to: "+currentvol);
final AudioManager am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_MUSIC, maxstreamvol, AudioManager.FLAG_SHOW_UI);
am.setStreamSolo(AudioManager.STREAM_MUSIC, true);
System.out.println("Volume Raised!");
Po googling wokół, wydaje się, że błąd ten ma do czynienia z wielowątkowych sytuacji ... Kod w tym momencie powinien być uruchomiony na wątków UI.
W rzeczywistości, nawet otoczył go:
runOnUiThread(new Runnable() {
public void run() {
// code_goes_here
}
});
, a które produkowały ten sam błąd. Błąd, który widzę jest następujący:
I/System.out(24949): Maximum volume for this stream is: 15 and it used to be set to: 0
W/MessageQueue( 490): Handler (android.media.AudioManager$FocusEventHandlerDelegate$1) {42b52f28} sending message to a Handler on a dead thread
W/MessageQueue( 490): java.lang.RuntimeException: Handler (android.media.AudioManager$FocusEventHandlerDelegate$1) {42b52f28} sending message to a Handler on a dead thread
W/MessageQueue( 490): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:294)
W/MessageQueue( 490): at android.os.Handler.enqueueMessage(Handler.java:618)
W/MessageQueue( 490): at android.os.Handler.sendMessageAtTime(Handler.java:587)
W/MessageQueue( 490): at android.os.Handler.sendMessageDelayed(Handler.java:558)
W/MessageQueue( 490): at android.os.Handler.sendMessage(Handler.java:495)
W/MessageQueue( 490): at android.media.AudioManager$1.dispatchAudioFocusChange(AudioManager.java:1894)
W/MessageQueue( 490): at android.media.IAudioFocusDispatcher$Stub.onTransact(IAudioFocusDispatcher.java:57)
W/MessageQueue( 490): at android.os.Binder.execTransact(Binder.java:351)
W/MessageQueue( 490): at dalvik.system.NativeStart.run(Native Method)
I/System.out(24949): Volume Raised!
Czy ktoś wie, co się tutaj dzieje?
Czy żądasz * Audio Focus * w swoim kodzie? Spróbuj także użyć 'applicationContext' np. '(AudioManager) getApplicationContext(). GetSystemService (Context.AUDIO_SERVICE);' – iTech
Próbowałem tego i przetestowałem. To sprawiło, że upadek Handler'a zniknął, ale nadal nie pozwala mi niezawodnie podnosić dźwięku ... – Dwebtron
Edycja: Okazało się, że audio nie było moją winą, ponieważ spowodowałem wyścig! Ups! (Zapomniałem edytować to jakiś czas temu) – Dwebtron