我正在使用android audiodomain來靜音和取消靜音流類似STREAM_SYSTEM和STREAM_NOTIFICATION,靜音很簡單,調用setStreamMute,但我無法找到isStreamMuted方法。爲什麼AudioManager.isStreamMuted不可用?
尋找內部源代碼我可以看到it exists所以問題是'如何檢查流是否被靜音?
我工作在Android 4.0.4
我正在使用android audiodomain來靜音和取消靜音流類似STREAM_SYSTEM和STREAM_NOTIFICATION,靜音很簡單,調用setStreamMute,但我無法找到isStreamMuted方法。爲什麼AudioManager.isStreamMuted不可用?
尋找內部源代碼我可以看到it exists所以問題是'如何檢查流是否被靜音?
我工作在Android 4.0.4
令人不快的答案是,流靜音每個進程的基礎上運行。因此,您可以將靜音狀態安全地存儲在某個靜態變量中,並進行適當的包裝,並自行跟蹤靜音狀態。從痛苦的經歷說起。有時你做你必須做的事情。他們爲什麼這樣做?這是一個更棘手的問題....
他們通過隱藏剝離方法出來的android.jar的:
/**
* get stream mute state.
*
* @hide
*/
public boolean isStreamMute(int streamType) {
思考是你的朋友。這對我有效。
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中使用,而無需使用反射。
感謝非常非常非常非常非常小的修正isMuted =(布爾)m.invoke(am,AudioManager.STREAM_MUSIC); –
已修復答案。謝謝! –
不錯的問題。尋找同樣的東西。你找到答案了嗎? –
不幸的解決方案 – dafi