3

具体的には、市場の意図を処理するアプリケーションがあるかどうかを把握しようとしていますが、一般的なケースのソリューションが欲しいです。

このようなことをすると、インテントを処理できるアプリケーションがあるかどうかがわかります。実際に意図を起動しないことをしようとしています。私ができることについてのアイデアはありますか?

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

私が欲しいのは、実際に活動を開始する必要のない解決策です。これをやりたい理由はいくつかありますが、この理由を考えたのは私だけではないと思います。方法があるに違いないようです...

4

2 に答える 2

8

PackageManagerおよびqueryIntentActivities()またはを使用しresolveActivity()ます。前者は、で使用される にList一致するものの を返します。後者は、一致がない場合、または「最良の一致」である場合に返されます (複数の一致がある場合は、選択アクティビティである可能性があります)。IntentstartActivity()nullIntent

于 2012-12-29T00:44:55.743 に答える
0

これは、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 );
}
于 2012-12-29T00:51:13.810 に答える