为什么AudioManager.isStreamMuted不可用?

时间:2012-12-09 16:35:06

标签: android android-audiomanager

我正在使用Android AudioManager来静音和取消静音流,例如STREAM_SYSTEM和STREAM_NOTIFICATION,静音很简单,只需调用setStreamMute但我无法找到isStreamMuted方法。

查看源代码内容我可以看到it exists,所以问题是'如何检查流是否已静音?

我正在使用Android 4.0.4

3 个答案:

答案 0 :(得分:8)

思考是你的朋友。这对我有用。

try {
    Method m = AudioManager.class.getMethod("isStreamMute", int.class);
    isMuted = (Boolean) m.invoke(am, AudioManager.STREAM_MUSIC);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
    System.out.println(e);
}

更新:现在可以在API 23中访问方法public boolean isStreamMute (int streamType),而无需使用反射。

答案 1 :(得分:7)

令人不快的答案是流静音基于每个进程运行。因此,您可以安全地将静音状态存储在某个静态变量中,适当地包裹,并自己跟踪静音状态。说到痛苦的经历。有时你做你必须做的事。他们为什么这样做?这是一个更难的问题......

答案 2 :(得分:1)

他们使用hide:

将方法从android.jar中删除
/**
 * get stream mute state.
 *
 * @hide
 */
public boolean isStreamMute(int streamType) {