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的結構,這樣的方法就不行了。<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+z8LD5r3pydzSu7j2v8nS1NDeuMTS9MG/tcTQoXRyaWNro6zSu7j2xru5+8/ruMm19Lb4w7u3qLjJtfS1xLe9t6ijujwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">MPMusicPlayerController* musicController = [MPMusicPlayerController applicationMusicPlayer];musicController.volume = 0.2;
使用之前需要添加MediaPlayer.framework。
為什麼說蘋果想幹掉而沒法幹掉呢?這個方法是在iOS3.0裡添加的,當時估計還沒有”不允許使用代碼修改音量“這樣的規範;後來在7.0的時候,這個方法被depress掉了,說明蘋果是想幹掉的。但是對於一個持續改進的系統來說,一般都要做向前相容,否則就會出現像WP6-WP7-WP8這樣的悲劇。所以蘋果對於去掉一個方法是非常謹慎的,終於還是把這個方法留著了,在它強大的圍牆裡給開發都留下了一扇窗戶。