【发布时间】:2018-03-12 07:34:50
【问题描述】:
我的工作
我正在检索所有已安装应用的列表,如下所示(对于类似应用的启动器):
PackageManager pm = context.getPackageManager();
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null)
.addCategory(Intent.CATEGORY_LAUNCHER);
// flag PackageManager.GET_RESOLVED_FILTER will set ResolveInfo.filter (not documented, but tested)
// many examples use flag == 0, but then the filter is always null
List<ResolveInfo> ril = pm.queryIntentActivities(mainIntent, PackageManager.GET_RESOLVED_FILTER);
if (ril != null) {
for (ResolveInfo ri : ril) {
// I need this info!
// ri.isDefault is always false...
boolean isDefault = ri.isDefault || ril.filter.hasCategory(Intent.CATEGORY_DEFAULT);
}
}
到目前为止,这是可行的。但是像三星手机应用程序这样的一些应用程序不尊重他们应该只用Intent.CATEGORY_DEFAULT 标记一项活动。以下是三星应用程序中两个活动的类别:
ActivityInfo{cd007eb com.android.contacts.activities.PeopleActivity}
filter:
0 = "android.intent.category.DEFAULT"
1 = "android.intent.category.LAUNCHER"
2 = "android.intent.category.BROWSABLE"
3 = "android.intent.category.APP_CONTACTS"
ActivityInfo{3e9ba8d com.android.dialer.DialtactsActivity}
filter:
0 = "android.intent.category.DEFAULT"
1 = "android.intent.category.LAUNCHER"
2 = "android.intent.category.BROWSABLE"
要求
- 我需要一个像我这样的应用程序这样的启动器可以启动的所有活动的列表
- 如果
ResolveInfo是仅在我使用应用程序包名称时启动的信息,我需要该信息,就像我使用通过以下命令检索的意图时一样:pm.getLaunchIntentForPackage(packageName)。这就是我在这篇文章中所说的默认启动意图
问题
如何可靠地确定 ResolveInfo 是否属于默认启动意图?
【问题讨论】:
标签: android package-managers android-package-managers