setStreamMute永远不会取消静音

Jon*_*ong 5 android android-audiomanager

在文档中,有人说:

静音命令受到保护以防止客户端进程死亡:如果流上有活动静音请求的进程终止,则此流将自动取消静音.

对给定流的静音请求是累积的:AudioManager可以从一个或多个客户端接收几个静音请求,并且只有在收到相同数量的取消静音请求时才会取消静音.

那么,第一段是真的; 每当我的进程终止时,我静音的所有流都会自动取消静音.然而,无论我多少次打电话,setStreamMute(someStream, false)它都永远无法取消静音.上次我在静音后尝试调用它超过100万次而且没有发生!

只是要提一下 - 如果我用同样的方法取消静音,我会把它静音 - 它保持不变.但是在下一次调用相同的方法时 - 它永远不会取消静音.

我在广播接收器onReceive方法中静音,我开始使用报警管理器.也许是因为我的应用程序在静音呼叫和取消静音呼叫之间被杀死了?(但我的应用程序仍然留在RAM中)

这个问题可能是因为我没有保留对AlarmManager的引用(每次都有不同的实例吗?)

有人遇到过这个问题吗?

Jon*_*ong 21

Apperantly,还有就是在这些Android版本的bug; 测试版本2.2和2.3.3并且存在错误.看起来,如果您调用setStreamMuteAudioManager对象:

AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(...., true);
Run Code Online (Sandbox Code Playgroud)

丢失了参考,然后得到一个新的参考:

am = null;
am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
Run Code Online (Sandbox Code Playgroud)

不管如何你很多次打电话am.setStreamMute(..., false),现在,它将永远不会取消静音.

我想现在报告这个错误...

课程:保持对AudioManager 的静态引用.

@Michell Bak,感谢给我一个检查它是否是Android软件bug的想法:)我已经被困在这件事上太多时间了,我从来没有想过看看它不是我的错.