2 clcurie 11 clcurie_11 于 2013.07.04 12:35 提问

如何打开所有格式的文件?

我想实现一个 browser-like 程序。
我想打开设备能提供的所有的文件格式。
我用的下面的代码只能打开特殊的格式:

String mimetype = mime_type(FileName);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(File), mimetype);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

public String mime_type(String name) {
String type = null;
String[] mime = {".htm\ttext/html", ".html\ttext/html", ".doc\tapplication/msword", ".ppt\tapplication/vnd.ms-powerpoint", ".xls\tapplication/vnd.ms-excel", 
                ".txt\ttext/plain", ".pdf\tapplication/pdf", ".xlsx\tapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
                ".pptx\tapplication/vnd.openxmlformats-officedocument.presentationml.presentation", ".docx\tapplication/vnd.openxmlformats-officedocument.wordprocessingml.document"};
int i;
for(i = 0; i < mime.length; i++) {
if(name.toLowerCase().endsWith(mime[i].split("\t")[0])) {
return mime[i].split("\t")[1];
}
}
return type;
}

文件的格式我不能全部列出来。
是否有什么方法可以用于所有的格式呢?或者来列出所有的程序让用户选择?

2个回答

baimy1985
baimy1985   2013.07.04 19:18
已采纳

下面这个方法可以得到所有能打开当前文件的程序集合,遍历下list就可以得到对应的应用名
List list = getPackageManager().queryIntentActivities(
mimetypeIntent, PackageManager.MATCH_DEFAULT_ONLY);
if (list.size() > 0) {
mimetypeIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(mimetypeIntent);
}

Baby_Bonnie
Baby_Bonnie   2013.07.04 14:43

我发现给 / 设置 mimetype 可以达到效果。
她会显示所有选择了的安装的app。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!