Android功能记录(四) ------ Unity实现控制第三方音乐播放器暂停、播放

  • 参考链接:https://blog.csdn.net/evahuangchen/article/details/53321670

在Android实现提供给Unity使用,废话不多说,直接上代码

MainActivity代码:

public class MainActivity extends UnityPlayerActivity {
  Context mContext = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
    }
  public void stopMusic()
    {
        startService(new Intent(mContext,MusicService.class));
    }
    public void startMusic()
    {
        stopService(new Intent(mContext,MusicService.class));
    }
}

MusicService代码:

package ylcx.com.blue;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

import static android.content.ContentValues.TAG;

public class MusicService extends Service {
    private AudioManager mAm;
    private static boolean vIsActive = false;
    private MyOnAudioFocusChangeListener mListener;

    public class MyOnAudioFocusChangeListener implements AudioManager.OnAudioFocusChangeListener {
        @Override
        public void onAudioFocusChange(int focusChange) {
            // TODO Auto-generated method stub
        }

    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Log.d(TAG, "onStartCommand");
        Toast.makeText(getApplicationContext(), "服务已启动", 0).show();

        mAm = (AudioManager) getApplicationContext().getSystemService(
                Context.AUDIO_SERVICE);
        vIsActive=mAm.isMusicActive();
        mListener = new MyOnAudioFocusChangeListener();
        if(vIsActive)
        {
            int result = mAm.requestAudioFocus(mListener,
                    AudioManager.STREAM_MUSIC,
                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

            if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED)
            {
                Log.d(TAG, "requestAudioFocus successfully.");
            }
            else
            {
                Log.d(TAG, "requestAudioFocus failed.");
            }
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        if(vIsActive)
        {
            mAm.abandonAudioFocus(mListener);
        }
        Log.d(TAG, "onDestroy");
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}

配置AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ylcx.com.blue">

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".MusicService"/>
    </application>

</manifest>

Unity调用:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour {
    AndroidJavaClass jc;
    AndroidJavaObject jo;
    // Use this for initialization
    void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        if (Application.platform == RuntimePlatform.Android)
        {
            jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        }
    }
    public void playMusic()
    {
        jo.Call("startMusic");
    }
    public void stopMusic()
    {
        jo.Call("stopMusic");
    }
}

如果Unity调用Android有不懂得,请参考:

         Unity功能记录(五)------ Android studio打包aar包后与unity互相通信


猜你喜欢

转载自blog.csdn.net/dengshunhao/article/details/80866392