代码之家  ›  专栏  ›  技术社区  ›  Ajay Chauhan

queryIntentActivities()和resolveActivity()之间有什么区别?哪种方法是了解现有应用程序的最佳方法?

  •  1
  • Ajay Chauhan  · 技术社区  · 7 年前

    第一个:

    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) {
    
    }
    

    现在我的疑问是有什么区别,我应该用哪一个?

    3 回复  |  直到 7 年前
        1
  •  19
  •   David Wasser    7 年前

    如果您只想阻止“ActivityNotFoundException”,那么两种方法都可以。两者都不是“最好的”。他们基本上做同样的事情。你想知道是否至少有一个 Activity 可以处理你的 Intent .

    否则:

    • queryIntentActivities() 返回可以处理 .
    • resolveActivity() 返回“最佳” 活动 意图

    因此,如果你想知道所有的活动,可以处理你的 意图 ,您将使用 如果你想知道安卓认为什么是“最好的” 活动 ,那么您将使用 resolveActivity() .

        2
  •  3
  •   AskNilesh    7 年前

    来自文档

    为给定的意图确定要执行的最佳操作。 Intent.resolveActivity(PackageManager) 如果未显式指定类,则查找活动。

    MATCH_DEFAULT_ONLY 唯一的标志。您需要这样做才能以与 Context.startActivity(Intent) Intent.resolveActivity(PackageManager) 去吧。

        3
  •  2
  •   waqaslam    7 年前

    总之, queryIntentActivities List 所有可用的 ResolveInfo 可以处理你的问题 Intent 相比之下 resolveActivity .

    因此,一个可以用来表示 选择器 另一个可以用来直接启动应用程序。

    更多信息,请阅读他们的官方文件。