IOS代碼修改音量實例詳解
最近在做一個項目,需要用戶在打開APP后,自動將音量調節到某個值,于是研究了一下。
之前做過iOS上聲音的研究,蘋果對iPhone設備的輸入/輸出的控制很嚴格,因為蘋果要控制用戶體驗的一致性。比如:用戶將耳機拔下來的時候,蘋果認為,用戶這時候不希望其他人知道自己在聽什么,于是這時候聲音會被自動暫停。在音量調整上,蘋果也采取了類似的策略。蘋果認為,用戶不需要APP來為他指定音量,因為這樣有時候用戶會感到不舒服。蘋果的開發文檔是這么說的:
You cannot change device volume programatically,however MPVolumeView (volume slider) is there to change device volume but only through user interaction.
蘋果提供了一個讓用戶手動修改音量的方法:MPVolumeView。用戶通過拖動slider bar修改音量,就是下面這玩意兒:
雖然蘋果將幾乎所有的代碼實現控制音量的方法都堵死了,但通過一些私有的方法還是可以修改的。比如,我們遍歷一下MPVolumeView的subViews,從中得到UISlider,然后修改slider的value。這種方法雖然可以修改,但訪問了私有的類,有被App Store拒絕的風險。而且不知道什么時候蘋果修改MPVolumeView的結構,這樣的方法就不行了。
下面介紹一個可以修改音量的小trick,一個蘋果想干掉而沒法干掉的方法:
MPMusicPlayerController* musicController = [MPMusicPlayerController applicationMusicPlayer]; musicController.volume = 0.2;
使用之前需要添加MediaPlayer.framework。
為什么說蘋果想干掉而沒法干掉呢?這個方法是在iOS3.0里添加的,當時估計還沒有”不允許使用代碼修改音量“這樣的規范;后來在7.0的時候,這個方法被depress掉了,說明蘋果是想干掉的。但是對于一個持續改進的系統來說,一般都要做向前兼容,否則就會出現像WP6-WP7-WP8這樣的悲劇。所以蘋果對于去掉一個方法是非常謹慎的,終于還是把這個方法留著了,在它強大的圍墻里給開發都留下了一扇窗戶。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答