具体来说,我试图找出是否有处理市场意图的应用程序,但我想一般情况下的解决方案。
我知道,如果你这样做,你可以知道是否有可用的应用程序来处理这个意图。 我试图做一些事情,实际上并没有推出的意图。 什么我可以做任何想法?
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)
}
我想的是,实际上并不涉及启动活动的解决方案。 有几个原因我想这样做,但我想我没有想到的原因只有一个,好像一定有办法...
使用PackageManager
和queryIntentActivities()
或resolveActivity()
前者将返回一个List
的匹配的事情Intent
与使用startActivity()
后者将返回null
的没有匹配或Intent
这是“最佳匹配”(这可能是在选配的活动,如果有一个以上的比赛)。
这是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?