为了账号安全,请及时绑定邮箱和手机立即绑定

在Android上通过Intent选择任何类型的文件

在Android上通过Intent选择任何类型的文件

慕少森 2019-12-20 10:06:15
我想为可以返回任何文件的应用程序启动一个Intentchooser目前,我使用(从Android电子邮件源代码复制的文件附件)Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("*/*");Intent i = Intent.createChooser(intent, "File");startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);但是它仅在我的Galaxy S2上显示“图库”和“音乐播放器”。该设备上有一个文件浏览器,我希望它出现在列表中。我还希望照相机应用程序显示在列表中,以便用户可以拍摄照片并通过我的应用程序发送。如果我安装了Astro文件管理器,它也会响应该意图。我的客户仅是Galaxy SII所有者,鉴于他们已经具有基本但足够的文件管理器,因此我不想强迫他们安装Astro文件管理器。关于如何实现此目标的任何想法吗?我敢肯定,我已经看到默认的文件管理器出现在这样的菜单中以选择文件,但是我不记得是哪个应用程序了。
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

不是用于相机,而是用于其他文件。


在我的设备中,我已经ES File Explorer安装好了,这对我来说很简单。


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("file/*");

startActivityForResult(intent, PICKFILE_REQUEST_CODE);


查看完整回答
反对 回复 2019-12-20
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

三星文件浏览器不仅需要自定义操作(com.sec.android.app.myfiles.PICK_DATA),而且部分类(意向。CATEGORY_DEFAULT)和MIME类型应该额外进行传递。


Intent intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");

intent.putExtra("CONTENT_TYPE", "*/*");

intent.addCategory(Intent.CATEGORY_DEFAULT);

您也可以使用此操作来打开多个文件:com.sec.android.app.myfiles.PICK_DATA_MULTIPLE无论如何,这是我的解决方案,可在Samsung和其他设备上使用:


public void openFile(String mimeType) {


        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

        intent.setType(mimeType);

        intent.addCategory(Intent.CATEGORY_OPENABLE);


        // special intent for Samsung file manager

        Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");

         // if you want any file type, you can skip next line 

        sIntent.putExtra("CONTENT_TYPE", mimeType); 

        sIntent.addCategory(Intent.CATEGORY_DEFAULT);


        Intent chooserIntent;

        if (getPackageManager().resolveActivity(sIntent, 0) != null){

            // it is device with Samsung file manager

            chooserIntent = Intent.createChooser(sIntent, "Open file");

            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent});

        } else {

            chooserIntent = Intent.createChooser(intent, "Open file");

        }


        try {

            startActivityForResult(chooserIntent, CHOOSE_FILE_REQUESTCODE);

        } catch (android.content.ActivityNotFoundException ex) {

            Toast.makeText(getApplicationContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();

        }

    }

该解决方案对我来说效果很好,也许对其他人也很有用。


查看完整回答
反对 回复 2019-12-20
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

在银河上为我完成的这项工作请注意其显示联系人,设备上安装的文件管理器,图库,音乐播放器


private void openFile(Int  CODE) {

    Intent i = new Intent(Intent.ACTION_GET_CONTENT);

    i.setType("*/*");

    startActivityForResult(intent, CODE);

}

在这里获取onActivityResult活动的路径。


protected void onActivityResult(int requestCode, int resultCode, Intent data) {

     String Fpath = data.getDataString();

    // do somthing...

    super.onActivityResult(requestCode, resultCode, data);


}


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 1425 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信