0

如何在相機快門關閉的同時播放聲音?用相機快門聲音同時播放音頻

在我的應用程序中,我有一個插入相機預覽。活動開始5秒後自動拍攝3張照片。在此期間,應用程序正在通過藍牙接收一系列值。每次值都大於預設的閾值時,應用程序播放一個音調,這是使用MediaPlayer完成的。

問題是,當相機關閉時,快門發出的咔嗒聲似乎佔據了所有的音頻,並且正在播放的音調停止並且僅在3次快門按下後纔會恢復。我不想沉默相機快門,所以有什麼方法可以讓快門點擊時發出聲音?這一切都發生在一項活動中。

感謝

回答

1

一個可能的解決方案是使用隱藏ENFORCED_AUDIBLE流類型爲你的聲調。這是相機快門聲音最有可能使用的流類型,因此除非快門聲音已被消音,否則它不會被靜音。

請注意,此流類型直到ICS(或者它可能是GB/HC,我無法肯定地說我的頭頂部)才引入,所以它不會與每個版本的Android存在。此流類型標識符的整數值爲7,但如果要檢查是否存在/以編程方式獲取其值,則可以使用AudioSystem類中的反射來完成此操作。

這裏有一個如何可以這樣做的例子:

public static boolean mHasEnforcedStream = true; 
public static int STREAM_SYSTEM_ENFORCED = 0; 

... 

static 
{   
    try 
    { 
     Class asClass = Class.forName("android.media.AudioSystem"); 
     Field sseField = asClass.getDeclaredField("STREAM_SYSTEM_ENFORCED"); 
     STREAM_SYSTEM_ENFORCED = sseField.getInt(null); 
    } 
    catch (Exception e) 
    { 
     mHasEnforcedStream = false; 
    } 
} 


請記住,如果你使用這個流類型您總能獲得你的聲調在揚聲器即使用戶有例如一個3.5毫米的有線耳機連接,即使用戶已將他/她的手機置於靜音模式。

+0

我無法在標準Android文檔中找到關於'ENFORCED_AUDIO'的信息。它看起來像AudioSystem不再是一個開放的類。 – Dsodo

+0

這是一個隱藏的流類型,這就是爲什麼我建議使用反射來檢查它的存在。查看我的代碼示例以瞭解如何完成此操作。 – Michael

+0

謝謝Michael!我現在開始工作了。但它看起來像強制它將音量設置爲最大值,並且音色完全爆炸。我無法拒絕,並懷疑它忽略了這一點。 – Dsodo

-1

嗯,因爲我還是新的節目,我會做一個谷歌搜索上的哪些文件發出相機聲音,我會把您的應用加入其中,將重命名與不同的擴展名的文件所以聲音不會消失,讓他們重新回到原始文件。或者我會看看如何通過更改相機值使相機保持沉默。我知道在我的三星Galaxy SIII上我必須更改相機文件名稱。 (短跑運營商)

0

我認爲這是你應該需要的。這應該包含你所需要的。第一個鏈接可能比第二個鏈接更有用,因爲您仍然想要其他聲音,儘管可能會禁用相機梭動聲音專用的音頻通道。

+0

我不想播放另一個聲音來代替快門聲音。我希望它能夠播放音調。音調可以隨時開始播放。如果在相機關閉之前音調開始播放,那麼我想在相機快門按下時聽到仍在播放的音調。 – Dsodo