- 参考链接: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有不懂得,请参考: