STREAM_MUSIC
プログラムでボリュームをストリームの最大値まで上げようとしていますが、そうすると「デッドスレッドでハンドラーにメッセージを送信する」という問題が発生します。また、100%の確率で音量が上がるわけではないようですが、このエラーが発生すると、ほとんどの場合音量が上がります。
コードは次のとおりです。
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!");
グーグルした後、このエラーはマルチスレッドの状況に関係しているようです...この時点でのコードはUIスレッドで実行されているはずです。
実際、私はそれを次のように囲みました。
runOnUiThread(new Runnable() {
public void run() {
// code_goes_here
}
});
そして、それは同じエラーを引き起こしました。私が見ているエラーはこれです:
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!
ここで何が起こっているのか誰か知っていますか?