android调用系统文件浏览器获得uri或者文件路径

本文介绍了如何使用隐式Intent启动系统文件浏览器,并通过onActivityResult方法接收返回的URI。虽然URI不是直接的文件路径,但可以通过转换得到。请注意根据选择的文件类型调整MediaStore的相关内容,如从Image换成Audio等。示例代码中展示了如何获取文件路径,但实际应用时可能需要自行搜索更多资料进行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


基本思路:

1.使用隐式intent和startActivityforResult开启系统文件浏览器。

2.使用onAcitivityRsult方法接受返回的 intent,取出其中包含的uri(注意这不是文件路径,但是和文件路径可以相互转化)。

3.下面注释的就是其中的获取文件路径的代码。要注意根据你选择的文件类型修改MediaStore.后面的内容。也就是把Image换成音频或者其他的。只有对应才能正确的解析。

还有一些专门讲述二者相互转的文章。请自行搜索。 

//Cursor actualimagecursor = managedQuery(uri, proj, null, null, null);
           // int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
           // actualimagecursor.moveToFirst();
            //String img_path = actualimagecursor.getString(actual_image_column_index);
          //  File file = new File(img_path);
           // Toast.makeText(MainActivity.this, file.toString(), Toast.LENGTH_SHORT).show();


public class MainActivity extends Activity {



        Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    
    private void initView(){
   
        btn= (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("*/*");//设置类型,我这里是任意类型,任意后缀的可以这样写。
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                startActivityForResult(intent,1);
            }
        });
    }
    
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {//是否选择,没选择就不会继续
            Uri uri = data.getData();//得到uri,后面就是将uri转化成file的过程。
            String[] proj = {MediaStore.Images.Media.DATA};
            //Cursor actualimagecursor = managedQuery(uri, proj, null, null, null);
           // int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
           // actualimagecursor.moveToFirst();
            //String img_path = actualimagecursor.getString(actual_image_column_index);
          //  File file = new File(img_path);
           // Toast.makeText(MainActivity.this, file.toString(), Toast.LENGTH_SHORT).show();
            Toast.makeText(MainActivity.this, uri.toString(), Toast.LENGTH_SHORT).show();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马工匠坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值