【问题标题】:Why AudioManager.isStreamMuted isn't available?为什么 AudioManager.isStreamMuted 不可用?
【发布时间】:2012-12-09 16:35:05
【问题描述】:

我正在使用 android AudioManager 对 STREAM_SYSTEM 和 STREAM_NOTIFICATION 等流进行静音和取消静音,静音可以直接调用 setStreamMute,但我找不到 isStreamMuted 方法。

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

我正在使用 Android 4.0.4

【问题讨论】:

  • 好问题。寻找相同的。你找到答案了吗?

标签: android android-audiomanager


【解决方案1】:

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

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),而无需使用反射。

【讨论】:

  • 非常感谢和非常非常非常小的修正 isMuted = (Boolean) m.invoke(am, AudioManager.STREAM_MUSIC);
  • 已修复。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    他们使用 hide 将方法从 android.jar 中剥离出来:

    /**
     * get stream mute state.
     *
     * @hide
     */
    public boolean isStreamMute(int streamType) {
    

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 1970-01-01
      • 2022-10-05
      • 2023-02-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      相关资源
      最近更新 更多