首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从统一访问Android Camera.Parameters

从统一访问Android Camera.Parameters
EN

Stack Overflow用户
提问于 2013-08-26 18:17:03
回答 1查看 6.4K关注 0票数 3

我想要从安卓设备获得相机的数量,检查一个是否是背板,并为该相机获得水平和垂直视角Camera.Parameters.getHorizontalViewAngle()

我想通过一个Unity3D c#脚本来完成这个任务,但是我的java技能是有限的。有人能提供帮助吗?我有这样的代码:

代码语言:javascript
复制
using UnityEngine;

#if UNITY_ANDROID
public class CameraParametersAndroid
{
    public static float HorizontalViewAngle { get; protected set; }
    public static float VerticalViewAngle   { get; protected set; }
    public static int   numCameras          { get; protected set; }

    static CameraParametersAndroid()
    {
        AndroidJavaClass unityPlayerClass = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"),
                         cameraClass = new AndroidJavaClass ("android.hardware.Camera"),
                         cameraParametersClass = new AndroidJavaClass ("android.hardware.Camera.Parameters"),
                         cameraInfoClass = new AndroidJavaClass ("android.hardware.Camera.CameraInfo");

        AndroidJavaObject currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
        object[] args = {currentActivity};

        AndroidJavaObject camera = cameraClass.CallStatic<AndroidJavaObject>("getCamera", args);

        if (camera != null)
        {
            AndroidJavaObject cameraParameters = camera.Call<AndroidJavaObject>("getParameters");

            numCameras = camera.Call<int>("getNumberOfCameras");
            HorizontalViewAngle = cameraParameters.Call<float>("getHorizontalViewAngle");
            VerticalViewAngle   = cameraParameters.Call<float>("getVerticalViewAngle");

        }
        else
        {
            Debug.LogError("[CameraParametersAndroid] Camera not available");
        }
    }
}
#endif

但即使是getNumberOfCameras()调用也不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-31 18:11:06

getNumberOfCameras是一个静态方法,所以您需要CallStatic您的'cameraClass‘

在'getCamera‘中没有'android.hardware.Camera’方法(或者至少我在文档中找不到它)。你应该用'Camera.open‘代替,但是有一个窍门。“Camera.open”要求你的应用程序有相机功能,除非你使用内置的摄像头功能,否则它不是由团结生成的。

以下是关于Android的工作:

代码语言:javascript
复制
using UnityEngine;

#if UNITY_ANDROID
public class CameraParametersAndroid
{
    public static float HorizontalViewAngle { get; protected set; }
    public static float VerticalViewAngle { get; protected set; }
    public static int numCameras { get; protected set; }

    static CameraParametersAndroid()
    {
        AndroidJavaClass cameraClass = new AndroidJavaClass("android.hardware.Camera");

        numCameras = cameraClass.CallStatic<int>("getNumberOfCameras");

        // This is an ugly hack to make Unity
        // generate Camera permisions
        WebCamDevice[] devices = WebCamTexture.devices;

        // Camera.open gets back-facing camera by default
        // you should check for exceptions
        int camID = 0;
        AndroidJavaObject camera = cameraClass.CallStatic<AndroidJavaObject>("open", camID);

        // I'm pretty sure camera will never be null at this point
        // It will either be a valid object or Camera.open would throw an exception
        if (camera != null)
        {
            AndroidJavaObject cameraParameters = camera.Call<AndroidJavaObject>("getParameters");
            HorizontalViewAngle = cameraParameters.Call<float>("getHorizontalViewAngle");
            VerticalViewAngle = cameraParameters.Call<float>("getVerticalViewAngle");

        }
        else
        {
            Debug.LogError("[CameraParametersAndroid] Camera not available");
        }
    }
}
#endif
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18450404

复制
相关文章

相似问题

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