gpt4 book ai didi

java - AudioManager 在死线程上向 Handler 发送消息?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:51 25 4
gpt4 key购买 nike

我正在尝试以编程方式将音量提高到 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!");

google了一下,好像这​​个错误跟多线程的情况有关……此时的代码应该是运行在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!

有人知道这里发生了什么吗?

最佳答案

您的问题可能与此线程中报告的问题有关 - onPostExecute not being called in AsyncTask (Handler runtime exception)

音频焦点更改的显示正在触发 Android 无法完成的 UI 事件。目前尚不清楚为什么会这样。也许音频管理器是在一个上下文中获得的,而显示音量的 toast 是在另一个上下文中执行的?一个快速而肮脏的更改是将标志交换为 FLAG_VIBRATE 并检查这是否有所不同。这会将问题缩小到 UI 更新,然后您可以继续处理。

关于java - AudioManager 在死线程上向 Handler 发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15349349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com