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

目录

1.需要用到安卓原生代码

2.下面我们只用unity实现,不需要用jar包或aar包

3. AndroidTools.UnityAppContext部分的代码为:


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

1.需要用到安卓原生代码

//音乐音量
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);

 以上为原生安卓用到的几个方法,

获得最大音量

获得当前音量

设置音量

2.下面我们只用unity实现,不需要用jar包或aar包

    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());
    }

3. 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");

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值