zoukankan      html  css  js  c++  java
  • Android向unity发送消息

    有些时候需要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试试

  • 相关阅读:
    [].copyWithin.call({length:5,3:1},0,3)
    url、 src 和href 标签的区别
    http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)
    windows环境下配置webpack
    typeof作用
    行内块之间存在间隙
    “DllRegisterServer的调用失败”问题解决办法
    SQL Server集群服务器的优缺点
    UTF8转成GB2312乱码问题解决思路
    什么是RFID技术
  • 原文地址:https://www.cnblogs.com/Jason-c/p/7797851.html
Copyright © 2011-2022 走看看