我可以测试一下,看看如果一个应用程序是avaliable处理的意图,但不启动它?(Can I tes

2019-07-17 16:05发布

具体来说,我试图找出是否有处理市场意图的应用程序,但我想一般情况下的解决方案。

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

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

我想的是,实际上并不涉及启动活动的解决方案。 有几个原因我想这样做,但我想我没有想到的原因只有一个,好像一定有​​办法...

Answer 1:

使用PackageManagerqueryIntentActivities()resolveActivity() 前者将返回一个List的匹配的事情Intent与使用startActivity() 后者将返回null的没有匹配或Intent这是“最佳匹配”(这可能是在选配的活动,如果有一个以上的比赛)。



Answer 2:

这是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 );
}


文章来源: Can I test to see if an application is avaliable to handle an intent, without starting it?