queryIntentActivities() 和 resolveActivity() 之间有什么区别。哪一个是了解现有应用程序的最佳方法?
What is the difference between queryIntentActivities() and resolveActivity().Which one is the best approach to know about existing apps for a intent?
正如我在 Android 文档中看到的那样,在将用户发送到另一个应用程序时尝试构建隐式意图。这是避免 ActivityNotFoundException 的两种方法。
第一个:
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
第二个:
Intent chooser = Intent.createChooser(intent, title);
if (intent.resolveActivity(getPackageManager()) != null) {
}
现在我的疑问是有什么区别,我应该使用哪一个?
来自文档
检索可以针对给定意图执行的所有活动。
确定针对给定 Intent 执行的最佳操作。
如果未明确指定 class,这就是 Intent.resolveActivity(PackageManager)
查找 activity 的方式。
注意:如果使用隐式Intent(未指定显式ComponentName),请务必考虑是否设置MATCH_DEFAULT_ONLY
only 标志。您需要像 Context.startActivity(Intent)
和 Intent.resolveActivity(PackageManager)
那样解析 activity。
简而言之,queryIntentActivities
returns 所有可用 ResolveInfo
中的一个 List
可以处理您给定的 Intent
而相反 resolveActivity
returns单曲最适合ResolveInfo
.
因此,一个可用于显示选择器,另一个可用于直接启动应用程序。
有关更多信息,请阅读他们的官方文档。
取决于你想做什么。
如果您只是想阻止 'ActivityNotFoundException',这两种方法都可以。 "best" 也不是。他们基本上做同样的事情。您想知道是否至少有 1 个 Activity
可以处理您的 Intent
.
否则:
queryIntentActivities()
returns 可以处理 Intent
的所有活动的列表。
resolveActivity()
returns"best"Activity
可以处理Intent
因此,如果您想知道可以处理您的 Intent
的所有活动,您可以使用 queryIntentActivities()
,如果您想知道 Android 认为什么是 "best" Activity
,那么你会使用 resolveActivity()
.
正如我在 Android 文档中看到的那样,在将用户发送到另一个应用程序时尝试构建隐式意图。这是避免 ActivityNotFoundException 的两种方法。
第一个:
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
第二个:
Intent chooser = Intent.createChooser(intent, title);
if (intent.resolveActivity(getPackageManager()) != null) {
}
现在我的疑问是有什么区别,我应该使用哪一个?
来自文档
检索可以针对给定意图执行的所有活动。
确定针对给定 Intent 执行的最佳操作。
如果未明确指定 class,这就是 Intent.resolveActivity(PackageManager)
查找 activity 的方式。
注意:如果使用隐式Intent(未指定显式ComponentName),请务必考虑是否设置MATCH_DEFAULT_ONLY
only 标志。您需要像 Context.startActivity(Intent)
和 Intent.resolveActivity(PackageManager)
那样解析 activity。
简而言之,queryIntentActivities
returns 所有可用 ResolveInfo
中的一个 List
可以处理您给定的 Intent
而相反 resolveActivity
returns单曲最适合ResolveInfo
.
因此,一个可用于显示选择器,另一个可用于直接启动应用程序。
有关更多信息,请阅读他们的官方文档。
取决于你想做什么。
如果您只是想阻止 'ActivityNotFoundException',这两种方法都可以。 "best" 也不是。他们基本上做同样的事情。您想知道是否至少有 1 个 Activity
可以处理您的 Intent
.
否则:
queryIntentActivities()
returns 可以处理Intent
的所有活动的列表。resolveActivity()
returns"best"Activity
可以处理Intent
因此,如果您想知道可以处理您的 Intent
的所有活动,您可以使用 queryIntentActivities()
,如果您想知道 Android 认为什么是 "best" Activity
,那么你会使用 resolveActivity()
.