【发布时间】:2010-08-24 11:28:03
【问题描述】:
如何从应用程序中获取 mimeType。
我正在开发一个基于 mimeType 过滤某些已安装应用程序的应用程序。
有人可以帮我解决这个问题吗?
非常感谢
【问题讨论】:
标签: android mime-types
如何从应用程序中获取 mimeType。
我正在开发一个基于 mimeType 过滤某些已安装应用程序的应用程序。
有人可以帮我解决这个问题吗?
非常感谢
【问题讨论】:
标签: android mime-types
mime 类型与活动相关联。您可以使用 List 和 PackageManager.queryIntentActivities(i, 0) 来获取所有活动,从而获取给定数据 mime 类型的应用程序。
public static List<ResolveInfo> getIntents(String action, String category,
PackageManager pm) {
Intent i = new Intent(action, null);
i.addCategory(category);
i.setData(data_uri)
List<ResolveInfo> list = pm.queryIntentActivities(i, 0);
return list;
}
否则,您可以通过以下方式获取所有应用程序(可启动):
getIntents(Intent.ACTION_DEFAULT,Intent.CATEGORY_LAUNCHER,pm);
现在按String type = getIntent().getType();进行分类
【讨论】:
如何从应用程序中获取 mimeType。
应用程序没有 MIME 类型。
您可以使用某种 MIME 类型创建ACTION_VIEWIntent,并使用PackageManager 和queryIntentActivities() 来确定哪些活动将响应该Intent。
【讨论】:
intent 中只能获取 MIME 类型的数据:
String type = getIntent().getType();
【讨论】:
虽然这不是一个完整的答案,但这应该可以帮助您更接近:
PackageManager pm = getPackageManager();
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
//i.setData(Media.INTERNAL_CONTENT_URI);
List<ResolveInfo> list = pm.queryIntentActivities(i, 0);
for(ResolveInfo item : list){
try {
PackageInfo info = pm.getPackageInfo(item.activityInfo.applicationInfo.packageName, pm.GET_SIGNATURES);
Signature[] s = info.signatures;
Log.d(LOG_TAG,item.activityInfo.name +":"+ s.toString());
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(item.filter!=null){
Log.d(LOG_TAG,item.activityInfo.name + ": " + item.filter.toString());
List<String> types = (List<String>) item.filter.typesIterator();
}
}
【讨论】: