返回
Android 文件选择返回路径:告别繁琐,拥抱优雅
Android
2023-12-25 19:55:38
前言
Android 系统中文件选择器是个让人又爱又恨的存在。它看似简单,却总能带来意外的烦恼,尤其是返回文件路径。本文将为你揭示Android文件选择返回路径的奥秘,让你告别繁琐,拥抱优雅。
一、难点剖析
选择文件后,如何获取其路径,这本应是一项简单至极的任务。然而,现实却并非如此。Android系统的碎片化导致了文件选择器的千差万别,各家厂商的自定义实现更是让问题雪上加霜。
二、问题解决方案
面对Android文件选择返回路径的难题,我们总结出以下解决方案:
1. ** 限制文件类型
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*"); // 匹配所有类型文件
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*"}); // 限制为图片类型
2. ** 借助第三方库
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean granted) {
if (granted) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*"); // 匹配所有类型文件
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(intent, FILE_SELECT_CODE);
} catch (ActivityNotFoundException e) {
// Handle the exception
}
}
}
});
三、返回路径处理
文件选择完成后,根据不同的设备和Android版本,返回路径的形式可能会有所不同。以下是对常见情况的处理方法:
1. ** Uri 路径
Uri uri = data.getData();
String path = uri.getPath();
2. ** 文件符
ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fd = pfd.getFileDescriptor();
3. ** 内容提供者
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
int columnIndex = cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME);
cursor.moveToFirst();
String fileName = cursor.getString(columnIndex);
四、实例演示
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILE_SELECT_CODE && resultCode == RESULT_OK) {
if (data != null) {
Uri uri = data.getData();
String path = null;
if (uri.getScheme().equals("content")) {
// Uri 路径
path = uri.getPath();
} else if (uri.getScheme().equals("file")) {
// 文件符
ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fd = pfd.getFileDescriptor();
path = fd.toString();
} else if (uri.getScheme().equals("media")) {
// 内容提供者
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
int columnIndex = cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME);
cursor.moveToFirst();
path = cursor.getString(columnIndex);
}
if (path != null) {
// 处理文件路径
} else {
// 文件路径获取失败
}
}
}
}
五、结语
通过本文的深入剖析和实用解决方案,相信你已经掌握了Android文件选择返回路径的秘诀。从此以后,告别繁琐,拥抱优雅,让文件选择不再成为难题。
后记
随着Android系统的不断更新,文件选择器的实现可能还会发生变化。建议开发者密切关注官方文档和社区讨论,及时掌握最新动态,以便在项目中做出适当的调整。