有些时候需要Android向unity发送消息,有两种方法实现,一、通过unity再带的消息机制,二、通过注册回调的方式。
一、通过UnityPlayer.UnitySendMessage();方法
详细的可以参考
二、注册回调
用到的是 AndroidJavaProxy 这个类
下面是代码
Android部分
接口
1 public interface ExActivityListener {2 public void onRestart();3 public void onStart();4 public void onResume();5 public void onPause();6 public void onStop();7 public void onActivityResult(int requestCode, int resultCode, Intent data);8 public void onTest();9 }
1 public class MainActivity extends UnityPlayerActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 7 } 8 private ExActivityListener listener; 9 public void setListener(ExActivityListener listener)10 {11 Log.v("Unity", "setListener(1)!------------");12 this.listener = listener;13 }14 15 @Override16 public void onRestart()17 {18 Log.v("Unity", "onRestart!------------");19 super.onRestart();20 if(listener != null) listener.onRestart();21 }22 23 @Override24 public void onStart()25 {26 super.onStart();27 if(listener != null) listener.onStart();28 }29 30 @Override31 public void onResume()32 {33 super.onResume();34 if(listener != null) listener.onResume();35 }36 37 @Override38 public void onPause()39 {40 super.onPause();41 if(listener != null) listener.onPause();42 }43 44 @Override45 public void onStop()46 {47 if(listener != null) listener.onStop();48 super.onStop();49 }50 51 public void onTest()52 {53 if(listener != null) listener.onTest();54 super.onStop();55 }56 @Override57 public void onActivityResult(int requestCode, int resultCode, Intent data)58 {59 if(listener != null) listener.onActivityResult(requestCode, resultCode, data);60 }61 public String test()62 {63 Log.v("测试","成功");64 onTest();65 return "测试成功";66 }67 }
unity代码
1 public class ActivityListener : AndroidJavaProxy 2 { 3 public ActivityListener() : base("com.test.mytest.ExActivityListener") 4 { 5 } 6 7 public void onRestart() 8 { 9 UnityEngine.Debug.LogError("Back to Unity onRestart"); 10 } 11 12 public void onStart() 13 { 14 UnityEngine.Debug.LogError("Back to Unity onStart"); 15 } 16 17 public void onResume() 18 { 19 UnityEngine.Debug.LogError("Back to Unity onResume"); 20 } 21 22 public void onPause() 23 { 24 UnityEngine.Debug.LogError("Back to Unity onPause"); 25 } 26 27 public void onStop() 28 { 29 UnityEngine.Debug.LogError("Back to Unity onStop"); 30 } 31 32 public void onActivityResult(int requestCode, int resultCode, AndroidJavaObject data) 33 { 34 UnityEngine.Debug.LogError("onActivityResult"); 35 } 36 public void onTest() 37 { 38 UnityEngine.Debug.LogError("Back to Unity OnTest"); 39 } 40 } 41 42 void Awake() 43 { 44 AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity"); 45 activity.Call("setListener", new ActivityListener()); 46 UnityEngine.Debug.LogError("Awake"); 47 } 48 49 void Start()50 {51 AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic ("currentActivity"); 52 string value2 = activity.Call ("test"); 53 Debug.Log (value2);54 55 }56 }
如果报找不到类的错误,把AndroidManifest.Xml导进unity试试