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); }
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); }