2012-12-09 36 views
6

我正在使用android audiodomain來靜音和取消靜音流類似STREAM_SYSTEM和STREAM_NOTIFICATION,靜音很簡單,調用setStreamMute,但我無法找到isStreamMuted方法。爲什麼AudioManager.isStreamMuted不可用?

尋找內部源代碼我可以看到it exists所以問題是'如何檢查流是否被靜音?

我工作在Android 4.0.4

+0

不錯的問題。尋找同樣的東西。你找到答案了嗎? –

+1

不幸的解決方案 – dafi

回答

7

令人不快的答案是,流靜音每個進程的基礎上運行。因此,您可以將靜音狀態安全地存儲在某個靜態變量中,並進行適當的包裝,並自行跟蹤靜音狀態。從痛苦的經歷說起。有時你做你必須做的事情。他們爲什麼這樣做?這是一個更棘手的問題....

1

他們通過隱藏剝離方法出來的android.jar的:

/** 
* get stream mute state. 
* 
* @hide 
*/ 
public boolean isStreamMute(int streamType) { 
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); 
} 

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

+1

感謝非常非常非常非常非常小的修正isMuted =(布爾)m.invoke(am,AudioManager.STREAM_MUSIC); –

+1

已修復答案。謝謝! –