从Android文件管理器打开文件?

时间:2015-07-10 09:22:03

标签: android xls internal-storage

如何让用户选择从文件管理器中选择文件?我想选择excel文件。

3 个答案:

答案 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)
    }