首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个用于统一3D的本地Flashlight Android插件

创建一个用于统一3D的本地Flashlight Android插件
EN

Stack Overflow用户
提问于 2017-01-10 14:09:01
回答 1查看 1.5K关注 0票数 0

我有一个问题,我不知道如何访问我的java插件从团结。

以下是Java代码:

代码语言:javascript
复制
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#功能:

代码语言:javascript
复制
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;
}

但当我进入时,它失败了:

代码语言:javascript
复制
var androidPlugin = new AndroidJavaObject  ("fr.vincentmazet.utilslibrary.FlashLight", currentActivity)

我不知道如何调试,如何从我的android中访问堆栈跟踪。

任何想法都是感激的,谢谢您的提前。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-10 14:53:11

我不知道如何调试,如何从我的android中访问堆栈跟踪。

自己调试Android插件是必须的。您可以使用Unity#的Debug.Log和Android端的Log.V来完成这一任务。

使用Android从Android查看日志,也可以查看联合的异常日志。

我不知道如何从联合访问我的java插件

你需要Context从团结到安卓插件。您也不需要从UnityPlayerActivity扩展。这里完全没有必要。

权限

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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#:

代码语言:javascript
复制
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");
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41570808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档