如何只在Unity3d使用C#开启/关闭的Andr​​oid手电筒 [英] How turn On/Off android flashlight using C# only in Unity3d

查看:1404
本文介绍了如何只在Unity3d使用C#开启/关闭的Andr​​oid手电筒的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何人都知道如何使用C#来开启/关闭的android手电筒只在Unity?
我不喜欢的插件了,我不想让我自己的。是否有一个原因,使我的设备切换或关闭手电筒使用纯C#?

我想这个脚本添加到主摄像头,但它只是没有做的伎俩:(

 私人BOOL活动;
私人AndroidJavaObject摄像机1;无效FL_Start()
{
    AndroidJavaClass cameraClass =新AndroidJavaClass(android.hardware.Camera);
    WebCamDevice [] =设备WebCamTexture.devices;    INT CAMID = 0;
    摄像机1 = cameraClass.CallStatic< AndroidJavaObject>(开放,CAMID);    如果(摄像机1!= NULL)
    {
        AndroidJavaObject cameraParameters = camera1.Call&所述; AndroidJavaObject&GT(getParameters);
        cameraParameters.Call(setFlashMode,火炬);
        camera1.Call(setParameters,cameraParameters);
        活动=真;
    }
    其他
    {
        Debug.LogError([CameraParametersAndroid]相机不可用);
    }}无效的OnDestroy()
{
    FL_Stop();
}无效FL_Stop()
{    如果(摄像机1!= NULL)
    {
        camera1.Call(停preVIEW);
        camera1.Call(释放);
        活动= FALSE;
    }
    其他
    {
        Debug.LogError([CameraParametersAndroid]相机不可用);
    }}无效OnGUI()
{
    GUILayout.BeginArea(新矩形(Screen.width * 0.1F,Screen.height * 0.1F,Screen.width * 0.3f,Screen.height * 0.1F));
    如果(!活动)
    {
        如果(GUILayout.Button(ENABLE手电筒))
            FL_Start();
    }
    其他
    {
        如果(GUILayout.Button(DISABLE手电筒))
            FL_Stop();
    }
    GUILayout.EndArea();
}


解决方案

较新的三星手机大约code非常挑剔。

您需要使用 camera1.Call(开始preVIEW);
如下图所示;

 如果(摄像机1!= NULL)
    {
     AndroidJavaObject cameraParameters = camera1.Call&所述; AndroidJavaObject&GT(getParameters);
     cameraParameters.Call(setFlashMode,火炬);
     camera1.Call(setParameters,cameraParameters);
     ///固定/////
     camera1.Call(开始preVIEW);
     活动=真;
    }

Anybody knows how to turn On/Off android flashlight using C# only in Unity? I don't like plugins, and I don't want to make one of my own. Is there a why to make my device switch the flashlight On or Off using pure C#?

I tried to add this script to the main camera, but it just didn't do the trick :(

private bool Active;
private AndroidJavaObject camera1;

void FL_Start()
{
    AndroidJavaClass cameraClass = new AndroidJavaClass("android.hardware.Camera");       
    WebCamDevice[] devices = WebCamTexture.devices;

    int camID = 0;
    camera1 = cameraClass.CallStatic<AndroidJavaObject>("open", camID);

    if (camera1 != null)
    {
        AndroidJavaObject cameraParameters = camera1.Call<AndroidJavaObject>("getParameters");
        cameraParameters.Call("setFlashMode", "torch");
        camera1.Call("setParameters", cameraParameters);
        Active = true;
    }
    else
    {
        Debug.LogError("[CameraParametersAndroid] Camera not available");
    }

}

void OnDestroy()
{
    FL_Stop();
}

void FL_Stop()
{

    if (camera1 != null)
    {
        camera1.Call("stopPreview");
        camera1.Call("release");
        Active = false;
    }
    else
    {
        Debug.LogError("[CameraParametersAndroid] Camera not available");
    }

}

void OnGUI()
{
    GUILayout.BeginArea(new Rect(Screen.width * 0.1f, Screen.height * 0.1f, Screen.width * 0.3f, Screen.height * 0.1f));
    if (!Active)
    {
        if (GUILayout.Button("ENABLE FLASHLIGHT"))
            FL_Start();
    }
    else
    {
        if (GUILayout.Button("DISABLE FLASHLIGHT"))
            FL_Stop();
    }
    GUILayout.EndArea();
}

解决方案

Newer Samsung phones are very picky about code.

You need to use camera1.Call("startPreview"); as shown below;

if (camera1 != null)
    {
     AndroidJavaObject cameraParameters = camera1.Call<AndroidJavaObject>("getParameters");
     cameraParameters.Call("setFlashMode", "torch");
     camera1.Call("setParameters", cameraParameters);
     ///FIX///// 
     camera1.Call("startPreview");
     Active = true;
    }

这篇关于如何只在Unity3d使用C#开启/关闭的Andr​​oid手电筒的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆