【Unity调用原生安卓】unity实现获取安卓媒体音量并修改

本文以修改媒体音量为例,修改铃声音量、系统音量方法也类似

需要用到安卓原生代码

//音乐音量
final AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
 
//获得最大音量
int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
 
//获得当前音量
int current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
 
//修改音量
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,5,AudioManager.FLAG_SHOW_UI);
 

以上为原生安卓用到的几个方法,只是在安卓开发中用到

  1. 获得最大音量
  2. 获得当前音量
  3. 设置音量

我们只用unity实现,不需要用jar包或aar包

相当于在unity端写了上面的代码

    AndroidJavaObject mAudioManager = null;
    AndroidJavaClass AudioManager;
    int STREAM_MUSIC;
    int GetMaxVolume()
    {
    
    
        AndroidJavaClass Context = new AndroidJavaClass("android.content.Context");
        AudioManager = new AndroidJavaClass("android.media.AudioManager");
        STREAM_MUSIC = AudioManager.GetStatic<int>("STREAM_MUSIC");
 
        mAudioManager = AndroidTools.UnityAppContext.Call<AndroidJavaObject>("getSystemService", Context.GetStatic<AndroidJavaObject>("AUDIO_SERVICE"));
        return mAudioManager.Call<int>("getStreamMaxVolume", STREAM_MUSIC);
    }
    int GetCurrentVolume()
    {
    
    
        return mAudioManager.Call<int>("getStreamVolume", STREAM_MUSIC);
    }
    void SetVolume(int value)
    {
    
    
        mAudioManager.Call("setStreamVolume", STREAM_MUSIC, value, AudioManager.GetStatic<int>("FLAG_PLAY_SOUND"));
 
        //AndroidTools.AndroidLogI(GetCurrentVolume().ToString());
    }

AndroidTools.UnityAppContext部分的代码为

        private static AndroidJavaObject _UnityActivity = null;
        /// <summary>
        /// 获取当前App的Activity
        /// </summary>
        /// <returns></returns>
        public static AndroidJavaObject UnityActivity
        {
    
    
            get
            {
    
    
                if (_UnityActivity == null)
                {
    
    
                    _UnityActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
                }
                return _UnityActivity;
            }
        }
 
        private static AndroidJavaObject _UnityAppContext = null;
 
        /// <summary>
        /// 获取当前App的Context
        /// </summary>
        public static AndroidJavaObject UnityAppContext
        {
    
    
            get
            {
    
    
                if (_UnityAppContext == null)
                {
    
    
                    _UnityAppContext = UnityActivity.Call<AndroidJavaObject>("getApplicationContext");
                }
                return _UnityAppContext;
            }
        }

或者简单写一下

AndroidJavaObject UnityActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject UnityAppContext = UnityActivity.Call<AndroidJavaObject>("getApplicationContext");

猜你喜欢

转载自blog.csdn.net/weixin_43149049/article/details/127298722