我正在使用 android AudioManager 来静音和取消静音流,如 STREAM_SYSTEM 和 STREAM_NOTIFICATION,静音是直接调用setStreamMute但我找不到 isStreamMuted 方法。
查看源代码我可以看到它存在所以问题是'如何检查流是否被静音?
我正在使用 Android 4.0.4
我正在使用 android AudioManager 来静音和取消静音流,如 STREAM_SYSTEM 和 STREAM_NOTIFICATION,静音是直接调用setStreamMute但我找不到 isStreamMuted 方法。
查看源代码我可以看到它存在所以问题是'如何检查流是否被静音?
我正在使用 Android 4.0.4
反射是你的朋友。这对我有用。
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);
}
更新:public boolean isStreamMute (int streamType)
现在可以在 API 23 中访问该方法,而无需使用反射。
令人不快的答案是流静音在每个进程的基础上运行。因此,您可以安全地将静音状态存储在某个静态变量中,适当地包装,并自己跟踪静音状态。以惨痛的经历说话。有时你会做你必须做的事情。他们为什么这样做?这是一个更难的问题......
他们使用 hide 将方法从 android.jar 中剥离出来:
/**
* get stream mute state.
*
* @hide
*/
public boolean isStreamMute(int streamType) {