MPMusicPlayerController setVolume是deprecated since iOS 7iOS 7:MPMusicPlayerController卷已棄用。如何現在更改設備音量?
是否有任何其他方式來更改系統音樂音量?最好沒有用戶交互。 其重要功能:自動增加來自AppStore的任何鬧鐘的音量。
MPMusicPlayerController setVolume是deprecated since iOS 7iOS 7:MPMusicPlayerController卷已棄用。如何現在更改設備音量?
是否有任何其他方式來更改系統音樂音量?最好沒有用戶交互。 其重要功能:自動增加來自AppStore的任何鬧鐘的音量。
準確回答你的問題: 是的還有其他方式可以在沒有用戶交互的情況下更改系統體積。
直到最近我以前認爲用編程方式使用MPVolumeView更改音量只能使用私有API。不過我已經證實,這改變volumeSlider的價值和僞造滑塊的觸上事件的工作原理:
MPVolumeView* volumeView = [[MPVolumeView alloc] init];
//find the volumeSlider
UISlider* volumeViewSlider = nil;
for (UIView *view in [volumeView subviews]){
if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
volumeViewSlider = (UISlider*)view;
break;
}
}
[volumeViewSlider setValue:1.0f animated:YES];
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];
(當滑塊接收觸上事件,它會調用自身_commitVolumeChange
方法,這將改變系統卷)
對不起,我是愚蠢的。我試圖將你的代碼粘貼到我的js函數中。 Dreamweaver會拋出一個紅色的語法箭頭。這是JS代碼還是其他的東西? – Garavani
@Garavani它是一個客觀的C代碼。並不是那麼直接地將它與js結合起來。 請在這裏找到更多的信息在這個教程 - http://www.bignerdranch.com/blog/javascriptcore-example/ – ambientlight
謝謝Hurden! 「不是直截了當」這是否意味着在你的眼睛中,可以通過在iPad上運行iOS 7.1.2的主屏幕上使用的Web應用程序通過JS控制音量?對於初學者來說,這將是很多艱苦的研究。所以也許這會更好,如果有人說:不,沒辦法這樣做。 – Garavani
直到蘋果認爲應該撤銷這個決定有兩種補救措施,我已經發現:使用卷屬性
只應使用第二個選項> = iOS 7.0。謝謝! :) – Alex
截至iOS 10,你仍然可以使用音量屬性! –
@Hurden,我寫了一個斯威夫特代碼來實現MPVolumeSlider:
for view in mpVolumeView.subviews {
let uiview: UIView = view as UIView
//println("\(uiview.description)")
if uiview.description.rangesOfString("MPVolumeSlider").first != nil {
mpVolumeSilder = (uiview as UISlider)
currentDeviceVolume = mpVolumeSilder!.value
return
}
}
的FUNC rangeOfString擴展字符串可以在這裏找到Swift: A pure Swift method for returning ranges of a String instance (Xcode 6 Beta 5)
,並使用此代碼來讓手勢和mpvolumeslider一起工作
@IBAction func handlePan(recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translationInView(self.view)
let dx = (translation.x-lastTranslationX)
let volumeChanged = Float(dx/mpVolumeView.frame.width)
currentDeviceVolume = currentDeviceVolume + Float(volumeChanged)
if currentDeviceVolume > 1 {
currentDeviceVolume = 1
} else if currentDeviceVolume < 0 {
currentDeviceVolume = 0
}
mpVolumeSilder!.value = currentDeviceVolume
if recognizer.state == .Changed {
lastTranslationX = translation.x
}
if recognizer.state == .Ended || recognizer.state == .Began {
lastTranslationX = 0
}
}
斯威夫特版本:
// Outlet added in Storyboard (Add UIView then set class to MPVolumeView)
@IBOutlet weak var mpVolumeView: MPVolumeView!
// Get volume slider within MPVolumeView
for subview in self.mpVolumeView.subviews {
if (subview as UIView).description.rangeOfString("MPVolumeSlider") != nil {
// Set volume
let volumeSlider = subview as UISlider
volumeSlider.value = 1
// Works with or without the following line:
// volumeSlider.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
break
}
}
只是這樣做:
let masterVolumeSlider: MPVolumeView = MPVolumeView()
if let view = masterVolumeSlider.subviews.first as? UISlider{
view.value = 1.0
}
'import MediaPlayer'is also needed – Mike
'masterVolumeSlider.alpha = 0.01; self.view.addSubview(masterVolumeSlider)'也允許我減少它而不顯示操作系統音量計 –
我最喜歡這個答案,因爲它很高雅,不需要使用內部類名。看起來最有可能在未來不會中斷。 –
該解決方案有點緊張,我認爲它有點奇怪一個官方的API不存在,但這裏是我的SWIFT解決方案建立在ambientlight的後
var _volumeView = MPVolumeView()
var _volumeSlider : UISlider? = nil
self.view.addSubview(_volumeView)
_volumeView.hidden = true
var i = 0
while i < _volumeView.subviews.count {
if let _r = _volumeView.subviews[i] as? UISlider {
_volumeSlider = _r
break
}
++i
}
let masterVolumeSlider : MPVolumeView = MPVolumeView()
if let view = masterVolumeSlider.subviews.first as? UISlider{
view.value = fVolume!
view.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
}
顯然有是改變系統音量,而完全不任何顯示的方式。
最重要的是它可以在iOS的11。
這裏是我是如何實現它:
1)所需的ViewController
let volumeView = MPVolumeView()
var slider: UISlider?
2)創建兩個變量下面的代碼添加到您的viewDidLoad
volumeView.alpha = 0.01
self.view.addSubview(volumeView)
if let view = volumeView.subviews.first as? UISlider {
slider = view
}
3)改變當你需要時可以自由運行
slider?.value = 0.4
我也依賴於此功能,因爲我的用戶希望能夠設置和保存我的應用程序打開的音量。這似乎是一個離開開發者控制的奇怪事情。 – amergin
@amergin同意。 – mark
有AVAudioPlayer:http://stackoverflow.com/questions/5222464/using-mpmediaitems-with-avaudioplayer。我的問題是它是否可以播放iPod庫中的歌曲。 –