publicclassUnityPlayerActivityextendsActivity { protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy
mUnityPlayer = new UnityPlayer(this); setContentView(mUnityPlayer); mUnityPlayer.requestFocus(); }
......... // For some reason the multiple keyevent type is not supported by the ndk. // Force event injection by overriding dispatchKeyEvent(). @OverridepublicbooleandispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_MULTIPLE) return mUnityPlayer.injectEvent(event); returnsuper.dispatchKeyEvent(event); } ......... }
Android Plugin需要包含Android项目中build后得到的app-debug.aar和Manifest.xml以及资源文件等,提供给Unity项目使用。文件存放在Unity项目中的**/Assets/Plugins/Android。Unity项目中的代码通过app-debug.aar**与封装在其中的Android代码进行交互。For more details about .aar, see Android Developer Doc. And for more information about “How Unity produces the Android Manifest”, see Unity Developer Doc
/Applications/Unity/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Classes\classes.jar 将其拷贝到UnityAndroid项目app目录下的libs目录下,右键Add as library,导入之后可以发现在build.gradle中就有他的引入了。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;
public class AndroidTest : MonoBehaviour {
// Use this for initialization void Start () { } // Update is called once per frame void Update () { } public void BtnShowMessage() { using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using(AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) { // 调用Android端方法 jo.Call("ShowToast", "Unity调用了Android中的AlertDialog"); } } }
public void BtnSetText() { using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) { // 调用Android端方法 jo.Call("setUnityText"); } } }
//Android端调用该方法 public void setText(string result){ Text text = GameObject.Find ("UnityText").GetComponent<Text> (); text.text = result; }
// Return the battery level as a float between 0 and 1 (1 being fully charged, 0 fulled discharged) publicfloatGetBatteryPct() { Intent batteryStatus = GetBatteryStatusIntent();
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
// Return whether or not we're currently on charge publicbooleanIsBatteryCharging() { Intent batteryStatus = GetBatteryStatusIntent();
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); return status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; }