如何在Unity3d中仅使用C#打开/关闭android手电筒

如何在Unity3d中仅使用C#打开/关闭android手电筒,c#,android,unity3d,C#,Android,Unity3d,有人知道如何在Unity中使用C#打开/关闭android手电筒吗? 我不喜欢插件,也不想自己做一个。是否有理由让我的设备使用纯C#打开或关闭手电筒 我试图将此脚本添加到主摄影机中,但没有成功:( private bool激活; 私有AndroidJavaObject camera1; void FL_Start() { AndroidJavaClass cameraClass=新的AndroidJavaClass(“android.hardware.Camera”); WebCamDevice

有人知道如何在Unity中使用C#打开/关闭android手电筒吗? 我不喜欢插件,也不想自己做一个。是否有理由让我的设备使用纯C#打开或关闭手电筒

我试图将此脚本添加到主摄影机中,但没有成功:(

private bool激活;
私有AndroidJavaObject camera1;
void FL_Start()
{
AndroidJavaClass cameraClass=新的AndroidJavaClass(“android.hardware.Camera”);
WebCamDevice[]设备=WebCamTexture.devices;
int-camID=0;
camera1=cameraClass.CallStatic(“打开”,camID);
如果(camera1!=null)
{
AndroidJavaObject cameraParameters=camera1.Call(“getParameters”);
cameraParameters.Call(“setFlashMode”、“torch”);
camera1.调用(“设置参数”,cameraParameters);
主动=真;
}
其他的
{
Debug.LogError(“[CameraParametersAndroid]摄像机不可用”);
}
}
void OnDestroy()
{
FL_停止();
}
无效FL_停止()
{
如果(camera1!=null)
{
摄像机1.呼叫(“审查”);
摄像机1.呼叫(“释放”);
主动=假;
}
其他的
{
Debug.LogError(“[CameraParametersAndroid]摄像机不可用”);
}
}
void OnGUI()
{
GUILayout.BeginArea(新矩形(屏幕宽度*0.1f,屏幕高度*0.1f,屏幕宽度*0.3f,屏幕高度*0.1f));
如果(!活动)
{
if(GUILayout.按钮(“启用手电筒”))
FL_Start();
}
其他的
{
if(GUILayout.按钮(“禁用手电筒”))
FL_停止();
}
GUILayout.EndArea();
}

较新的三星手机对代码非常挑剔

您需要使用
camera1.Call(“startPreview”);
如下图所示

if (camera1 != null)
    {
     AndroidJavaObject cameraParameters = camera1.Call<AndroidJavaObject>("getParameters");
     cameraParameters.Call("setFlashMode", "torch");
     camera1.Call("setParameters", cameraParameters);
     ///FIX///// 
     camera1.Call("startPreview");
     Active = true;
    }
if(camera1!=null)
{
AndroidJavaObject cameraParameters=camera1.Call(“getParameters”);
cameraParameters.Call(“setFlashMode”、“torch”);
camera1.调用(“设置参数”,cameraParameters);
///固定装置//
camera1.呼叫(“startPreview”);
主动=真;
}
AndroidJavaObject-camera=null;
AndroidJavaObject cameraParameters=null;
void toggleandroid手电筒()
{
如果(摄像机==null)
{
AndroidJavaClass cameraClass=新的AndroidJavaClass(“android.hardware.Camera”);
camera=cameraClass.CallStatic(“打开”,0);
如果(照相机!=null)
{
cameraParameters=camera.Call(“getParameters”);
cameraParameters.Call(“setFlashMode”、“torch”);
调用(“设置参数”,cameraParameters);
}       
}
其他的
{
cameraParameters=camera.Call(“getParameters”);
string flashmode=cameraParameters.Call(“getFlashMode”);
if(闪光模式!=“火炬”)
cameraParameters.Call(“setFlashMode”、“torch”);
其他的
cameraParameters.Call(“setFlashMode”、“off”);
调用(“设置参数”,cameraParameters);
}
}
void ReleaseAndroidJavaObjects()
{
如果(照相机!=null)
{
摄像机。呼叫(“释放”);
摄像机=零;
}
}

您可以看看Android摄像头捕获工具包的插件源代码()-我知道你说过你不喜欢插件,但是这个插件的源代码是可用的,可以让你看到需要调整的地方。关于你的问题,不是所有的手机都有Torch功能,所以这可能是你应该检查的?也许你应该使用unity本身使用的引用?

你有没有连接这个脚本指向某个游戏对象?是的…主摄像头。但这在我的htc设备上工作!对你来说很有趣,在我的Galaxsy S5上它不工作。我收到一条错误消息,我的设备无法连接到摄像头服务。非常感谢!这是我在StackOverFlow上看到的最酷的答案之一。这个代码适用于所有设备还是仅适用于三星设备?
if (camera1 != null)
    {
     AndroidJavaObject cameraParameters = camera1.Call<AndroidJavaObject>("getParameters");
     cameraParameters.Call("setFlashMode", "torch");
     camera1.Call("setParameters", cameraParameters);
     ///FIX///// 
     camera1.Call("startPreview");
     Active = true;
    }
AndroidJavaObject camera=null;
AndroidJavaObject cameraParameters=null;

void ToggleAndroidFlashlight()
{

    if (camera == null)
    {
        AndroidJavaClass cameraClass = new AndroidJavaClass("android.hardware.Camera"); 
        camera = cameraClass.CallStatic<AndroidJavaObject>("open", 0); 
        if (camera != null)
        {
            cameraParameters = camera.Call<AndroidJavaObject>("getParameters");
            cameraParameters.Call("setFlashMode","torch"); 
            camera.Call("setParameters",cameraParameters); 
        }       
    }
    else
    {
        cameraParameters = camera.Call<AndroidJavaObject>("getParameters");
        string flashmode = cameraParameters.Call<string>("getFlashMode");
        if(flashmode!="torch")
            cameraParameters.Call("setFlashMode","torch"); 
        else
            cameraParameters.Call("setFlashMode","off"); 

        camera.Call("setParameters",cameraParameters); 
    }
}

void ReleaseAndroidJavaObjects()
{
    if (camera != null)
    {
        camera.Call("release");
        camera = null;
    }
}