前言
之前写过一篇同名文章,讲的是在Android端编写aar/jar 插件供Unity使用。适合一些复杂的安卓逻辑或效果。那对于一些基础的Android_Java的API调用的话,可以通过本文方式直接在C#里写Java代码,无需写原生包,这么方便难道不酷嘛?
官方文档
使用
调用java方法
method |
desc |
Call |
调用方法,无返回 |
Call<T> |
调用方法,返回T类型 |
CallStatic |
调用静态方法,无返回 |
CallStatic<T> |
调用静态方法,返回T类型 |
栗子1:AlertDialog的封装实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| public class AndroidAlertDialog : IDisposable { private AndroidJavaObject builder = null; public AndroidAlertDialog() { builder = new AndroidJavaObject("android.app.AlertDialog$Builder", AndroidUnityActivity.CurActivity); }
public void SetTitle(string title) { builder.Call<AndroidJavaObject>("setTitle", title); } public void SetMessage(string message) { builder.Call<AndroidJavaObject>("setMessage", message); }
public void SetPositiveButton(string text, Action callback) { SetPositiveButton(text, new AndroidOnClickLisener(callback)); }
public void SetNegativeButton(string text, Action callback) { SetNegativeButton(text, new AndroidOnClickLisener(callback)); }
public void Show() { AndroidUnityActivity.RunOnUIThread(() => { using AndroidJavaObject dialog = builder.Call<AndroidJavaObject>("create"); dialog.Call("show"); }); }
public void Dispose() { builder?.Dispose(); builder = null; } }
|
栗子2:点击事件的绑定,也是C#的委托向java的传递。
java端需要接收,则需要准备一个接口。然后在C#中通过继承 AndroidJavaProxy
实现接口。
(PS: 然鹅,java不支持函数指针,不然像调用c一样传一个指针它不香?在C#与OC的文章会说到。)
1 2 3 4 5 6 7 8
| public class AndroidOnClickLisener : AndroidJavaProxy { private readonly Action action = null; public AndroidOnClickLisener(Action callback) : base("android.content.DialogInterface$OnClickListener") { action = callback; } void onClick(AndroidJavaObject dialogInterface, int arg1) { action?.Invoke(); } }
|
字段的访问与修改
目前还未用到,接口如下:
method |
desc |
Get |
获取字段 |
GetStatic |
获取静态字段 |
Set |
设置字段 |
SetStatic |
设置静态字段 |