iPhone 本体の音量を変更する
iPhone 本体の音量を変更するには MPVolumeView
と MPMusicPlayerController
クラスを使う。
MPMusicPlayerController
には
アプリ内の音楽再生周りを制御するインスタンスを呼び出す
+ (MPMusicPlayerController *)applicationMusicPlayer;
システムの音楽再生周りを制御するインスタンスを呼び出す
+ (MPMusicPlayerController *)iPodMusicPlayer NS_DEPRECATED_IOS(3_0, 8_0, "Use +systemMusicPlayer instead.");
があって、iPodMusicPlayer
の方は iOS 8で deprecated になったので代わりに
+ (MPMusicPlayerController *)systemMusicPlayer;
を使う。
ちなみにこの systemMusicPlayer
というクラスメソッド、現時点でドキュメントに記載がなくて MPMusicPlayerController.h
ヘッダにだけ記載があるので見落としがち、、*Xcode 6.3
音量を変更するのは以下のプロパティ
// The current volume of playing music, in the range of 0.0 to 1.0. // This property is deprecated -- use MPVolumeView for volume control instead. @property (nonatomic) float volume NS_DEPRECATED_IOS(3_0, 7_0);
でもこれも iOS 8で deprecated になってしまったので、ヘッダやドキュメントに記載されているように MPVolumeView
を使うしかない。
MPVolumeView
はUIの提供で、音量の直接のコントロールはできないので iOS 8以降では本体の音量を programmatically に変更する事は Private API を触らない限りできなくなった。
厳しいなと思ったけど、考えてみるとアプリが制御できるのはアプリ内の音量のみというポリシーは正しい気もする。
ちょっと気になったので iOS 8 で Private API を調べてみたら
volume
setVolume:
というメソッドはまだあって、その他に setPrivateVolume:
というメソッドもあった。
volume
の方は deprecated に設定しているから内部では setPrivateVolume:
の方を使っているっぽい。
Private API になってしまうけど、どちらも KVO で音量の制御はできた。*iOS 8.3