通过Android上的Intentselect任何types的文件
我想开始一个可以返回任何types的文件的应用程序的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上显示“Gallery”和“Music player”。 这个设备上有一个文件浏览器,我希望它出现在列表中。 我也希望相机应用程序显示在列表中,以便用户可以拍摄照片并通过我的应用程序发送。 如果我安装Astro文件pipe理器,它也会响应这个意图。 我的客户只是Galaxy SII的所有者,我不想强迫他们安装Astro文件pipe理器,因为他们已经有了一个基本但足够的文件pipe理器。
任何想法,我怎么能做到这一点? 我很确定,我已经看到默认文件pipe理器出现在这样的菜单中select一个文件,但我不记得在哪个应用程序。
不适用于相机,但适用于其他文件
在我的设备中,我安装了ES File Explorer
器,这个简单的东西适用于我的情况。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("file/*"); startActivityForResult(intent, PICKFILE_REQUEST_CODE);
三星文件浏览器不仅需要自定义操作( com.sec.android.app.myfiles.PICK_DATA ),还需要类别部分( Intent.CATEGORY_DEFAULT )和MIMEtypes作为额外的传递。
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无论如何,这里是我的解决scheme,在三星和其他设备上工作:
public void openFile(String minmeType) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(minmeType); 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", minmeType); 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(); } }
这个解决scheme适合我,也许会对别人有用。
这个工作为我在星系上注意其显示联系人,文件pipe理器安装在设备,画廊,音乐播放器
private void openFile(Int CODE) { Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.setType("*/*"); startActivityForResult(intent, CODE); }
这里获得onActivityResult
活动的path。
protected void onActivityResult(int requestCode, int resultCode, Intent data) { String Fpath = data.getDataString(); // do somthing... super.onActivityResult(requestCode, resultCode, data); }
原来三星文件浏览器使用自定义操作。 这就是为什么我可以看到三星文件浏览器,当从三星应用程序,而不是从我的文件。
该操作是“com.sec.android.app.myfiles.PICK_DATA”
我创build了一个自定义的活动select器,显示过滤两个意图的活动。
如果你想知道这一点,它存在一个名为文件对话框的开源库,它是一个小而易于使用,提供了一个文件select器。
与Android的另一个文件select器的库的不同之处在于,aFileDialog为您提供了将文件select器作为对话框和活动打开的选项。
它还允许您select文件夹,创build文件,使用正则expression式筛选文件并显示确认对话框。