我如何从应用程序中获取mimeType。
我正在开发一个应用程序,它根据mimeType过滤某些已安装的应用程序。
有人可以帮我解决这个问题吗?
非常感谢
答案 0 :(得分:1)
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();
进行分类答案 1 :(得分:0)
我如何从应用程序中获取mimeType。
应用程序没有MIME类型。
您可以使用某种MIME类型创建ACTION_VIEW
Intent
,并使用PackageManager
和queryIntentActivities()
来确定哪些活动会响应Intent
。
答案 2 :(得分:0)
您只能在意图中获取MIME类型的数据:
String type = getIntent().getType();
答案 3 :(得分:0)
虽然这不是一个完整的答案,但这可以帮助你更接近:
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();
}
}