Android queryIntentActivities()和resolveActivity()之间有什么区别。哪种方法是了解现有应用程序的最佳方法?
正如我在Android文档中看到的,当试图在将用户发送到另一个应用程序时构建隐式意图。这是避免ActivityNotFoundException的两种方法 第一个:Android queryIntentActivities()和resolveActivity()之间有什么区别。哪种方法是了解现有应用程序的最佳方法?,android,android-intent,android-activity,android-implicit-intent,Android,Android Intent,Android Activity,Android Implicit Intent,正如我在Android文档中看到的,当试图在将用户发送到另一个应用程序时构建隐式意图。这是避免ActivityNotFoundException的两种方法 第一个: Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); PackageManager packageManager = getPackageManager(); List<ResolveInfo> activities = packageManager.
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.resolveActivity(PackageManager)
在未明确指定类的情况下查找活动的方式
<强>注:如果使用隐式意图(没有指定明确的组件名),请务必考虑是否设置<代码> MatCHY-DeFultTyAuth/<代码>仅标志。您需要以与
Context.startActivity(Intent)
和Intent.resolveActivity(PackageManager)
相同的方式解析活动 简而言之,queryIntentActivities
返回所有可用ResolveInfo
的列表,该列表可以处理给定的意图
,而ResolveInfo
则返回最适合的ResolveInfo
因此,一个可用于显示选择器,另一个可用于直接启动应用程序
要了解更多信息,请阅读他们的官方文件。取决于你想做什么
如果您只想阻止“ActivityNotFoundException”,则两种方法都可以。两者都不是“最好的”。他们做的基本相同。您想知道是否至少有1个活动
可以处理您的意图
否则:
queryIntentActivities()
返回可以处理意图的所有活动的列表李>
resolveActivity()
返回可以处理意图的“最佳”活动
因此,如果您想知道所有能够处理您的意图的活动,您可以使用querytentActivities()
,如果您想知道Android认为什么是“最好的”活动,那么您可以使用resolveActivity()
当我们创建隐式意图时,我们应该使用哪一个?仍然没有解释哪一个最适合创建隐式意图。如果这可以用来显示选择器,那么意图是什么。createChooser(意图,标题);do?@AjayChauhan当您直接使用createChooser()
时,您可以控制一些行为(即:为选择器设置“标题”)。当Android自己创建选择器时(因为它需要用户选择一些东西来完成resolveActivity()
),它使用默认选择器。
Intent chooser = Intent.createChooser(intent, title);
if (intent.resolveActivity(getPackageManager()) != null) {
}