C# 脚本:
void Update ()
{
if (Input.GetKeyUp (KeyCode.Escape)) {
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
jo.Call ("yourBackEventFunction");
}
}
还有你的 Android 库
public class YourActivity extends
com.unity3d.player.UnityPlayerNativeActivity {
…
public void yourBackEventFunction() {
// Do something here
}
…
}
==========================
编辑:
如果你想调用 onBackPressed,你可以这样做:
在 YourActivity.java 中
@Override
public void onBackPressed() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(UnityPlayerNativeActivity.this,
"on Back Pressed", Toast.LENGTH_SHORT)
.show();
}
});
super.onBackPressed();
}
在 C# 脚本中:
void Update ()
{
if (Input.GetKeyUp (KeyCode.Escape)) {
Debug.Log ("onResume Received");
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
jo.Call ("onBackPressed");
}
}
或者在 YourActivity 中你可以:
创建 YourActivity 扩展 UnityPlayerNativeActivty
包含你的 Jar 库并调用你想要的函数。
使用 C# 脚本调用您的 Activity。
请注意,在 Unity 中,只有 1 个 Activity,它必须是 UnityPlayerNativeActivity 或者它必须是从 UnityPlayerNativeActivity 扩展的 Activity。如果没有 UnityPlayerNativeActivity 的扩展,您将无法使用 Jar 中的任何其他活动。
如果 JAR 中的 YourActivity 类扩展了 UnityPlayerNativeActivity。并且您不想更改 JAR,然后创建一个新的 Activity 类扩展 YourActivity。创建一个新 Jar + 旧 Jar 并制作一个新插件。
==========================
如果你想直接从C#调用一个函数到Java类,你仍然可以使用Android NDK来构建一个JNI lib
此示例演示如何使用 Java 代码与
Android 操作系统以及 C++ 如何在 C# 和 Java 之间架起一座桥梁。这
包中的场景显示一个按钮,单击该按钮会获取
应用程序缓存目录,由 Android 操作系统定义。请注意
您将需要 JDK 和 Android NDK 来编译
插件。
参考这里:http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html
此处示例:http://docs.unity3d.com/Documentation/Images/manual/AndroidJavaPlugin.zip
但我不确定您是否可以使用自己的 Activity。并且我建议从 UnityPlayerNativeActivty 创建一个新的 Activity Extends,因为这种方式比这种方式更简单且不可靠。
兄弟,
弗兰克