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

ask*_*r22 1 c# android unity-game-engine

有人知道如何在Unity中使用C#打开/关闭Android手电筒吗?我不喜欢插件,我也不想制作自己的插件.是否有原因让我的设备使用纯C#打开或关闭手电筒?

我试图将此脚本添加到主摄像头,但它只是没有做到这一点:(

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();
}
Run Code Online (Sandbox Code Playgroud)

小智 5

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

您需要使用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;
    }
Run Code Online (Sandbox Code Playgroud)