获取我使用的文件路径:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
Intent.ACTION_GET_CONTENT 不允许选择文件夹。 但如何获取文件夹/目录路径呢?
API 级别 19。
有没有办法在没有第三方库的情况下做到这一点?
获取我使用的文件
该代码与文件关系不大。内容!=文件。
但是如何获取文件夹/目录呢?
为此构建您自己的 UI。或者,使用第三方目录选择器库。
有没有办法在没有第三方库的情况下做到这一点?
没有平台定义的
Intent
用于选择文件系统目录。 ACTION_OPEN_DOCUMENT_TREE
将让用户在Android 5.1+上选择文档树,但文档树不一定是文件系统目录,就像ACTION_GET_CONTENT
和ACTION_OPEN_DOCUMENT
不一定涉及文件一样。
首先在您的活动类中创建常量:
private static final int PICKFILE_REQUEST_CODE = 100;
当您需要选择文件夹时,请使用如下意图:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);
用户选择文件夹后,您将得到结果
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICKFILE_REQUEST_CODE) {
String folderPath = data.getDataString();
//TODO
return;
}
super.onActivityResult(requestCode, resultCode, data);
要选择任何文件夹,你可以使用这个
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent,PICKFILE_RESULT_CODE);
获取文件后,其详细信息显示为
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String FilePath = data.getData().getPath();
String FileName = data.getData().getLastPathSegment();
int lastPos = FilePath.length() - FileName.length();
String Folder = FilePath.substring(0, lastPos);
textFile.setText("Full Path: \n" + FilePath + "\n");
textFolder.setText("Folder: \n" + Folder + "\n");
textFileName.setText("File Name: \n" + FileName + "\n"); }
这是一个示例,希望您可以清楚地了解如何做到这一点: http://android-er.blogspot.com/2011/04/more-for-pick-file-using.html
如果您只想获取共享访问存储中特定文件夹的路径。 处理 EXTERNAL_STORAGE 的读取权限后。
private ActivityResultLauncher<Intent> launchActivityForResult;
private FileBrowserActivityBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = FileBrowserActivityBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
launchActivityForResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) {
Intent data = result.getData();
System.out.println("Path ********** " + data.getData().getEncodedPath());
} else {
}
});
binding.browseFileBtn.setOnClickListener(v -> {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_STORAGE_ACCESS);
} else {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
launchActivityForResult.launch(intent);
}
});
}
不要忘记向 androidManifest 文件添加权限