pull/594/head
jhengazuki 2 months ago
parent 9073b08182
commit 2f3f39d30c
  1. 36
      app/src/main/java/com/fongmi/android/tv/utils/FileChooser.java

@ -22,6 +22,7 @@ import com.github.catvod.utils.Path;
import java.io.File; import java.io.File;
import java.io.InputStream; import java.io.InputStream;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
public class FileChooser { public class FileChooser {
@ -81,7 +82,7 @@ public class FileChooser {
if (DocumentsContract.isDocumentUri(context, uri)) path = getPathFromDocumentUri(context, uri); if (DocumentsContract.isDocumentUri(context, uri)) path = getPathFromDocumentUri(context, uri);
else if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) path = getDataColumn(context, uri); else if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) path = getDataColumn(context, uri);
else if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(uri.getScheme())) path = uri.getPath(); else if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(uri.getScheme())) path = uri.getPath();
return path != null ? URLDecoder.decode(path) : createFileFromUri(context, uri); return path != null ? URLDecoder.decode(path, StandardCharsets.UTF_8) : createFileFromUri(context, uri);
} }
private static String getPathFromDocumentUri(Context context, Uri uri) { private static String getPathFromDocumentUri(Context context, Uri uri) {
@ -113,22 +114,17 @@ public class FileChooser {
} }
private static String getPath(Context context, String[] split) { private static String getPath(Context context, String[] split) {
switch (split[0]) { return switch (split[0]) {
case "image": case "image" -> getDataColumn(context, ContentUris.withAppendedId(getImageUri(), Long.parseLong(split[1])));
return getDataColumn(context, ContentUris.withAppendedId(getImageUri(), Long.parseLong(split[1]))); case "video" -> getDataColumn(context, ContentUris.withAppendedId(getVideoUri(), Long.parseLong(split[1])));
case "video": case "audio" -> getDataColumn(context, ContentUris.withAppendedId(getAudioUri(), Long.parseLong(split[1])));
return getDataColumn(context, ContentUris.withAppendedId(getVideoUri(), Long.parseLong(split[1]))); default -> getDataColumn(context, ContentUris.withAppendedId(getFilesUri(), Long.parseLong(split[1])));
case "audio": };
return getDataColumn(context, ContentUris.withAppendedId(getAudioUri(), Long.parseLong(split[1])));
default:
return getDataColumn(context, ContentUris.withAppendedId(MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL), Long.parseLong(split[1])));
}
} }
private static String createFileFromUri(Context context, Uri uri) { private static String createFileFromUri(Context context, Uri uri) {
String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME}; String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME};
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); try (Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null)) {
try (cursor) {
if (cursor == null || !cursor.moveToFirst()) return null; if (cursor == null || !cursor.moveToFirst()) return null;
InputStream is = context.getContentResolver().openInputStream(uri); InputStream is = context.getContentResolver().openInputStream(uri);
if (is == null) return null; if (is == null) return null;
@ -143,8 +139,7 @@ public class FileChooser {
private static String getDataColumn(Context context, Uri uri) { private static String getDataColumn(Context context, Uri uri) {
String[] projection = {MediaStore.MediaColumns.DATA}; String[] projection = {MediaStore.MediaColumns.DATA};
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); try (Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null)) {
try (cursor) {
if (cursor == null || !cursor.moveToFirst()) return null; if (cursor == null || !cursor.moveToFirst()) return null;
return cursor.getString(cursor.getColumnIndexOrThrow(projection[0])); return cursor.getString(cursor.getColumnIndexOrThrow(projection[0]));
} catch (Exception e) { } catch (Exception e) {
@ -154,8 +149,7 @@ public class FileChooser {
private static String getNameColumn(Context context, Uri uri) { private static String getNameColumn(Context context, Uri uri) {
String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME}; String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME};
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); try (Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null)) {
try (cursor) {
if (cursor == null || !cursor.moveToFirst()) return null; if (cursor == null || !cursor.moveToFirst()) return null;
return cursor.getString(cursor.getColumnIndexOrThrow(projection[0])); return cursor.getString(cursor.getColumnIndexOrThrow(projection[0]));
} catch (Exception e) { } catch (Exception e) {
@ -187,6 +181,14 @@ public class FileChooser {
} }
} }
public static Uri getFilesUri() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
return MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL);
} else {
return MediaStore.Files.getContentUri("external");
}
}
private static boolean isExternalStorageDocument(Uri uri) { private static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority()); return "com.android.externalstorage.documents".equals(uri.getAuthority());
} }

Loading…
Cancel
Save