1. 程式人生 > >【Android適配問題集錦-相機類】Camera拍照時快門咔嚓聲適配問題

【Android適配問題集錦-相機類】Camera拍照時快門咔嚓聲適配問題

這裡寫圖片描述
現在Android手機一般都會帶有照相功能,有很多朋友就發現手機照相時快門聲音很響,想關又關不掉。。。。。不過話說回來,靜音拍照你想做啥?這裡寫圖片描述

來到主題上,因為網路上有很多關於“刪除或修改快門聲音檔案是關閉快門聲的方法”的內容,所以我就不贅述了。今天我想和大家說的是:在開發中,針對camera的靜音功能我們會遇到哪些機型相容問題?

從Google官方API中也沒有明確的指出關於相機拍照時快門聲音是如何控制的,關於shutter第一個引數API只是解釋為在相機拍照的瞬間進行回撥,並沒有明確說明是否是對拍照聲音的操作。

這裡寫圖片描述

當呼叫Camera的takePicture方法進行拍照時,為了防止偷拍等行為,會發出快門拍照的聲音,而且此聲音無法通過調節音量進行關閉,但由於不同機型不同Rom的差別,使得各個廠商針對此聲音的處理不同。

至此我總結了使用takePicture中ShutterCallback來控制拍照聲音的三種情況:

1、當takePicture傳入第一個引數ShutterCallback(ShutterCallback引數不為空)時,系統會發出快門拍照的聲音。

例如HTC 3D EVO,因此這款手機的快門聲音可以通過此方法進行控制。
這裡寫圖片描述

2、無論是否傳入ShutterCallback引數系統都沒有快門拍照的聲音。

例如LG P720手機就有此問題,此類手機問題比較嚴重,手機廠商自行修改了Rom,導致任何情況下呼叫takePicture方法進行拍照都沒有聲音,通過反編譯系統照相機可以看出,系統照相機拍照聲音是可以隨意控制的,當需要聲音時直接在應用中呼叫SoundPool發出拍照音效,否則靜音處理。所以我們在設計應用時針對這類機型也可以自行控制拍照聲音。

而步步高vivo Y1手機同樣有此現象,但和LG不同的是,這款機型的廠商修改了Rom,把拍照聲音的控制寫在了HAL層中,呼叫聲音的介面沒有暴露出來,我們只能通過反射進行對聲音的設定。

3、無論是否傳入ShutterCallback引數系統都有快門拍照的聲音。
例如華為Y220t,這類手機比較麻煩,通過反編譯Framework層關於拍照聲音是在硬體抽象層(HAL)實現的,所以應用開發無法通過程式碼控制拍照聲音的播放,只能給以相應的提示告訴使用者當前靜音無效,拍照時會發出快門的聲音。

綜上所述,使用takePicture中ShutterCallback來控制快門聲音時需要針對不同機型做不同處理。