欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity调用安卓相机、相册,并返回Unity路径。兼容安卓6.0以上

程序员文章站 2024-03-25 10:14:40
...

原插件在这篇博文

作者实现了裁剪照片功能并返回Texture,经过一番查看arr源码,我新建了AndroidStudio项目把裁剪功能去掉,只保留了返回Unity路径。Unity调用安卓相机、相册,并返回Unity路径。兼容安卓6.0以上

路径返回Unity并加载Texture

Unity调用安卓相机、相册,并返回Unity路径。兼容安卓6.0以上

private static Action<string> pathAction;
    public void OpenPhoto(Action<string> done)
    {
        AndroidJavaObject jo = new AndroidJavaClass("com.plugins.cameraplugin.CameraPlugin").CallStatic<AndroidJavaObject>("GetInstance");
        //调用插件函数:   传入回调函数的对象名
        jo.Call("openPhoto", gameObject.name);
        pathAction = done;
    }
    /// <summary>
    /// 打开相机拍照
    /// </summary>
    /// <param name="savePath">拍照保存路径</param>
    public void OpenCamera(string savePath, Action<string> done)
    {
        if (!System.IO.Directory.Exists(savePath))
        {
            System.IO.Directory.CreateDirectory(savePath);
        }
        AndroidJavaObject jo = new AndroidJavaClass("com.plugins.cameraplugin.CameraPlugin").CallStatic<AndroidJavaObject>("GetInstance");
        //调用插件函数:   传入回调函数的对象名  传入保存图片路径
        jo.Call("openCamera", gameObject.name, savePath);
        pathAction = done;
    }

    //安卓端调用 打开相册回调
    void GetImagePath(string str)
    {
        if (pathAction != null)
        {
            pathAction(str);
        }
    }
    //安卓端调用 打开相机回调
    void GetCameraImagePath(string str)
    {
        if (pathAction != null)
        {
            pathAction(str);
        }
    }
    //通过得到的路径加载图片
    void Load(string str)
    {
        path.text = str;
        //在Android插件中通知Unity开始去指定路径中找图片资源
        StartCoroutine(LoadTexture(str));
    }
    IEnumerator LoadTexture(string name)
    {
        //注解1
        string path = "file://"+ name;
        WWW www = new WWW(path);
        yield return www;
        if (string.IsNullOrEmpty(www.error))
            //为贴图赋值
            texture.texture = www.texture;
    }

下载地址