UnityからAndroid端末の音量を操作したかったのでやり方を調べました。AndroidではAudioManager.setStreamVolumeを使うことでプログラムから音量を変えることができるので、このAPIをUnityから叩いてみようと思います。
結論からいうと、以下のようなコードで実装できます。
private static readonly int STREAM_MUSIC = 3;
public static void SetVolume(int volume) {
var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var audioManager = context.Call<AndroidJavaObject>("getSystemService", "audio");
audioManager.Call("setStreamVolume", STREAM_MUSIC, volume, 0);
}
volume
は音量レベルを指定します。指定可能な値は0からAudioManager.getStreamMaxVolumeで取得できる値までです。
問答無用で端末の音量を最大にしたい時は、以下のようにします。
var maxVolume = audioManager.Call<int>("getStreamMaxVolume", STREAM_MUSIC);
SetVolume(maxVolume);
音量を絶対指定するのではなく、現在の音量から上げ下げする場合は、AudioManager.adjustStreamVolumeを使います。
private static readonly int STREAM_MUSIC = 3;
// volume には以下のいずれかを渡す
private static readonly int ADJUST_LOWER = -1;
private static readonly int ADJUST_SAME = 0;
private static readonly int ADJUST_RAISE = 1;
public static void AdjustVolume(int volume) {
var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var audioManager = context.Call<AndroidJavaObject>("getSystemService", "audio");
audioManager.Call("adjustStreamVolume", STREAM_MUSIC, volume, 0);
}
より詳しくは、AudioManagerのドキュメントを見てください。