【问题标题】:Can I test to see if an application is avaliable to handle an intent, without starting it?我是否可以在不启动应用程序的情况下测试应用程序是否可用于处理意图?
【发布时间】:2012-12-14 04:42:48
【问题描述】:

具体来说,我想弄清楚是否有一个应用程序可以处理市场意图,但我想要一个通用案例解决方案。

我知道如果你做这样的事情,你可以知道是否有一个应用程序可以处理这个意图。我正在尝试做一些实际上并没有启动意图的事情。关于我可以做什么的任何想法?

try
{
    String strURL="market://details?id="+thePackage;
    Intent the_intent = new Intent(Intent.ACTION_VIEW, Uri.parse(strURL));
    the_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
    startActivity(the_intent)

}
catch (ActivityNotFoundException e)
{
    String strUrl="https://play.google.com/store/search?c=apps&q="+thePackage;

    Intent the_intent = new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl));
    the_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
    startActivity(the_intent)
}

我想要的是一个不涉及实际启动活动的解决方案。我想这样做有几个原因,但我想我不是唯一一个想到原因的人,似乎必须有一种方法......

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    这是 CommonWare 回答中的一个实际示例。

    String strURL="market://details?id="+thePackage;
    Intent the_intent = new Intent(Intent.ACTION_VIEW, Uri.parse(strURL));
    the_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
    Log.v(TAG,""+_context.getPackageManager().queryIntentActivities(the_intent,Intent.FLAG_ACTIVITY_NEW_TASK));
    if (_context.getPackageManager().queryIntentActivities(the_intent,0).size()==0)
    {
        String strUrl="https://play.google.com/store/search?c=apps&q="+thePackage;
        the_intent = new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl));
        the_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
    }
    

    【讨论】:

    • 您的代码有错误,至少根据文档。对于queryIntentActivities(),“如果没有匹配的活动,则返回一个空列表。”您正在检查null,而不是一个空列表。此外,AFAIK,queryIntentActivities() 的第二个参数是MATCH_DEFAULT_ONLY0,而不是Intent.FLAG_ACTIVITY_NEW_TASK
    • 啊,这解释了为什么我的代码无法正常工作...我会修复它,谢谢!
    【解决方案2】:

    使用PackageManagerqueryIntentActivities()resolveActivity()。前者将返回与Intent 匹配的List 以与startActivity() 一起使用。后者将返回 null 以表示没有匹配或 Intent 这是“最佳匹配”(如果有多个匹配,则可能是选择器活动)。

    【讨论】:

    • Intent.resolveActivity()PackageManager.resolveActivity() 有何不同?
    • @CopsOnRoad:它们是等价的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多