为统一3D创建本机Flashlight Android Java插件 [英] Create a native Flashlight Android Java plugin for unity 3D
问题描述
我有一个问题,我不知道如何从Unity访问我的Java插件.
I have an issue, I don't know how to access to my java plugin from Unity.
这是Java代码:
package fr.vincentmazet.utilslibrary;
import android.content.Context;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import com.unity3d.player.UnityPlayerActivity;
public class FlashLight extends UnityPlayerActivity {
private CameraManager camManager;
private Context context;
public void FlashLight(Context context){
this.camManager = (CameraManager) context.getSystemService(context.CAMERA_SERVICE);
this.context = context;
}
public boolean enableFlash(){
try {
camManager.setTorchMode("0", true);
} catch (CameraAccessException e) {
e.printStackTrace();
}
return true;
}
public boolean stopFlash(){
try {
camManager.setTorchMode("0", false);
} catch (CameraAccessException e) {
e.printStackTrace();
}
return true;
}
}
这是我的c#函数:
public bool startFlash(){
if (Application.platform == RuntimePlatform.Android) {
using (var javaUnityPlayer = new AndroidJavaClass ("com.unity3d.player.UnityPlayer")) {
using (var currentActivity = javaUnityPlayer.GetStatic<AndroidJavaObject> ("currentActivity")) {
using (var androidPlugin = new AndroidJavaObject ("fr.vincentmazet.utilslibrary.FlashLight", currentActivity)) {
return androidPlugin.Call<bool> ("enableFlash");
}
}
}
}
return false;
}
但是当我输入时失败了:
But it failed when I enter in :
var androidPlugin = new AndroidJavaObject ("fr.vincentmazet.utilslibrary.FlashLight", currentActivity)
我不知道如何调试,可以从我的android访问堆栈跟踪.
And I don't know how to debug, access to the stack-trace from my android.
任何想法都很感激,谢谢你.
Any ideas is appreciated thank's you by advance.
推荐答案
我不知道如何调试,可以从我的计算机访问堆栈跟踪 android.
And I don't know how to debug, access to the stack-trace from my android.
必须自己调试Android插件.您可以使用 Unity/C#中的Debug.Log
和 Android/Java 中的Log.V
来实现.
Debugging your Android plugin yourself is a must. You can do this with Debug.Log
from Unity/C# and Log.V
from Android/Java side.
使用 Android Studio 中的 Android监视器查看来自Unity的日志以及异常日志.
Use Android Monitor from Android Studio to view the Logs and also Exception Log from Unity.
我不知道如何从Unity访问我的Java插件
I don't know how to access to my java plugin from Unity
您需要将Context
的实例从Unity发送到Android插件.您也不必从UnityPlayerActivity
开始扩展.这里完全没有必要.
You need to send instance of Context
from Unity to the Android Plugin. You also don't have to extend from UnityPlayerActivity
. Totally unnecessary here.
权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
Java:
public class FlashLight{
private CameraManager camManager;
static Context myContext;
// Called From C# to get the Context Instance
public static void receiveContextInstance(Context tempContext) {
myContext = tempContext;
this.camManager = (CameraManager) myContext.getSystemService(context.CAMERA_SERVICE);
}
public static boolean enableFlash(){
try {
camManager.setTorchMode("0", true);
} catch (CameraAccessException e) {
e.printStackTrace();
}
return true;
}
public static boolean stopFlash(){
try {
camManager.setTorchMode("0", false);
} catch (CameraAccessException e) {
e.printStackTrace();
}
return true;
}
}
C#:
AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
AndroidJavaObject unityContext;
AndroidJavaClass customClass;
void Start()
{
//Replace with your full package name
sendActivityReference("fr.vincentmazet.utilslibrary.FlashLight");
//Enable Flashlight
enableFlash();
//Disable Flashlight
//stopFlash();
}
void sendActivityReference(string packageName)
{
unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");
customClass = new AndroidJavaClass(packageName);
customClass.CallStatic("receiveContextInstance", unityContext);
}
bool enableFlash()
{
return customClass.CallStatic<bool>("enableFlash");
}
bool stopFlash()
{
return customClass.CallStatic<bool>("stopFlash");
}
这篇关于为统一3D创建本机Flashlight Android Java插件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!