有些时候需要Android向unity发送消息,有两种方法实现,一、通过unity再带的消息机制,二、通过注册回调的方式。
一、通过UnityPlayer.UnitySendMessage();方法
详细的可以参考http://www.xuanyusong.com/archives/676
二、注册回调
用到的是 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 @Override 16 public void onRestart() 17 { 18 Log.v("Unity", "onRestart!------------"); 19 super.onRestart(); 20 if(listener != null) listener.onRestart(); 21 } 22 23 @Override 24 public void onStart() 25 { 26 super.onStart(); 27 if(listener != null) listener.onStart(); 28 } 29 30 @Override 31 public void onResume() 32 { 33 super.onResume(); 34 if(listener != null) listener.onResume(); 35 } 36 37 @Override 38 public void onPause() 39 { 40 super.onPause(); 41 if(listener != null) listener.onPause(); 42 } 43 44 @Override 45 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 @Override 57 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<AndroidJavaObject>("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<AndroidJavaObject>("currentActivity"); 52 string value2 = activity.Call<string>("test"); 53 Debug.Log (value2); 54 55 } 56 }
如果报找不到类的错误,把AndroidManifest.Xml导进unity试试