public static Permission PickFile(FilePickedCallback callback, string[] allowedFileTypes)
    {
        if (allowedFileTypes == null || allowedFileTypes.Length == 0)
        {
            throw new ArgumentException("Parameter 'allowedFileTypes' is null or empty!");
        }

        Permission result = RequestPermission(true);

        if (result == Permission.Granted && !IsFilePickerBusy())
        {
#if !UNITY_EDITOR && UNITY_ANDROID
            AJC.CallStatic("PickFiles", Context, new FPResultCallbackAndroid(callback, null, null), false, SelectedFilePath, allowedFileTypes, "");
#elif !UNITY_EDITOR && UNITY_IOS
            FPResultCallbackiOS.Initialize(callback, null, null);
            _NativeFilePicker_PickFile(allowedFileTypes, allowedFileTypes.Length);
#else
            if (callback != null)
            {
                callback(null);
            }
#endif
        }

        return(result);
    }
예제 #2
0
    public static Permission PickFile(FilePickedCallback callback, string[] allowedFileTypes)
    {
        if (allowedFileTypes == null || allowedFileTypes.Length == 0)
        {
            throw new ArgumentException("Parameter 'allowedFileTypes' is null or empty!");
        }

        Permission result = RequestPermission(true);

        if (result == Permission.Granted && !IsFilePickerBusy())
        {
#if UNITY_EDITOR
            // Accept Android and iOS UTIs when possible, for user's convenience
            string[] editorFilters = new string[allowedFileTypes.Length * 2];
            for (int i = 0; i < allowedFileTypes.Length; i++)
            {
                if (allowedFileTypes[i].IndexOf('*') >= 0)
                {
                    if (allowedFileTypes[i] == "image/*")
                    {
                        editorFilters[i * 2]     = "Image files";
                        editorFilters[i * 2 + 1] = "png,jpg,jpeg";
                    }
                    else if (allowedFileTypes[i] == "video/*")
                    {
                        editorFilters[i * 2]     = "Video files";
                        editorFilters[i * 2 + 1] = "mp4,mov,wav,avi";
                    }
                    else if (allowedFileTypes[i] == "audio/*")
                    {
                        editorFilters[i * 2]     = "Audio files";
                        editorFilters[i * 2 + 1] = "mp3,aac,flac";
                    }
                    else
                    {
                        editorFilters[i * 2]     = "All files";
                        editorFilters[i * 2 + 1] = "*";
                    }
                }
                else
                {
                    editorFilters[i * 2] = allowedFileTypes[i];

                    if (allowedFileTypes[i].IndexOf('/') >= 0)                        // Android UTIs like 'image/png'
                    {
                        editorFilters[i * 2 + 1] = allowedFileTypes[i].Substring(allowedFileTypes[i].IndexOf('/') + 1);
                    }
                    else if (allowedFileTypes[i].StartsWith("public."))                        // iOS UTIs like 'public.png'
                    {
                        editorFilters[i * 2 + 1] = allowedFileTypes[i].Substring(7);
                    }
                    else if (allowedFileTypes[i].IndexOf('.') == 0)                        // Extensions starting with period like '.png'
                    {
                        editorFilters[i * 2 + 1] = allowedFileTypes[i].Substring(1);
                    }
                    else
                    {
                        editorFilters[i * 2 + 1] = allowedFileTypes[i];
                    }
                }
            }

            string pickedFile = UnityEditor.EditorUtility.OpenFilePanelWithFilters("Select file", "", editorFilters);

            if (callback != null)
            {
                callback(pickedFile != "" ? pickedFile : null);
            }
#elif UNITY_ANDROID
            AJC.CallStatic("PickFiles", Context, new FPResultCallbackAndroid(callback, null, null), false, SelectedFilePath, allowedFileTypes, "");
#elif UNITY_IOS
            FPResultCallbackiOS.Initialize(callback, null, null);
            _NativeFilePicker_PickFile(allowedFileTypes, allowedFileTypes.Length);
#else
            if (callback != null)
            {
                callback(null);
            }
#endif
        }

        return(result);
    }