如何让用户选择从文件管理器中选择文件?我想选择excel文件。
答案 0 :(得分:1)
请尝试以下代码
private static final int PICKFILE_REQUEST_CODE=3;
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent,PICKFILE_REQUEST_CODE);
答案 1 :(得分:0)
以下代码可用于在android中打开所有类型的文件。
1)在Oncreate()
通话
public void callIntent() {
Intent intent = new Intent()
.setType("*/*")
.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(Intent.createChooser(intent, "Select a file"), 123);
}
2)在andoridManifext中添加读写存储权限,并在Android 6.0或更高版本中以编程方式检查权限
3)成功授予权限onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 123 && resultCode == RESULT_OK) {
if ((data != null) && (data.getData() != null)) {
Uri selectedFile = data.getData();
}
}
}
答案 2 :(得分:0)
所有其他答案都包含旧的弃用方法 - startActivityForResult 和 onActivityResult。
目前,从存储中获取文件的有效方法:
Java:
private ActivityResultLauncher<Intent> getFilesLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
sendFiles(data);
}
}
) {
}
findViewById(R.id.button).setOnClickListener(v -> {
Intent intent = new Intent()
.setType("*/*")
.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getFilesLauncher.launch(intent);
});
科特林:
private var getFilesLauncher: ActivityResultLauncher<Intent> = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
if (it.resultCode == Activity.RESULT_OK) {
val data: Intent = it.data!!
sendFiles(data)
}
}
button.setOnClickListener
{
val intent = Intent()
.setType("*/*")
.setAction(Intent.ACTION_GET_CONTENT)
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.flags = FLAG_GRANT_READ_URI_PERMISSION or FLAG_GRANT_WRITE_URI_PERMISSION
getFilesLauncher.launch(intent)
}