3

他のアプリケーション (Gmail や Facebook、またはインストール済みのもの) を起動できるアプリケーションを作成しようとしています。

次のコードを使用しようとしました:

PackageManager pm = MainActivity.this.getPackageManager();
try
{
Intent it = pm.getLaunchIntentForPackage("FULLY QUALIFIED NAME");
if (null != it)
MainActivity.this.startActivity(it);
}
catch (ActivityNotFoundException e)
{ }

ただし、アプリケーションの完全修飾名が必要です。

どうすれば入手できますか?それらを取得するための組み込み方法はありますか?

4

2 に答える 2

2

アプリケーションには、ランチャーに属するアクティビティが 0 つ、1 つ、または複数ある場合があります。Intentしたがって、ランチャーは「すべてのアプリケーションとは何か、それぞれの起動は何か」と尋ねるべきではありません。代わりに、ランチャーは「表示すべきすべてのアクティビティは何ですか?」と尋ねる必要があります。

これは、 と を使用して実現さPackageManagerqueryIntentActivities()ます。このサンプル プロジェクトは、完全なランチャーを実装しています。主な行は次のとおりです。

PackageManager pm=getPackageManager();
Intent main=new Intent(Intent.ACTION_MAIN, null);

main.addCategory(Intent.CATEGORY_LAUNCHER);

List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);

launchables次に、そのコレクションをレンダリングする任意のメカニズムを使用できます。サンプル プロジェクトでは、それらをListView.

于 2014-01-31T22:12:02.293 に答える
1

次のように、すべてのアプリケーションのリストを取得できます。

final PackageManager packageManager = getPackageManager();
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

これで、すべてのアプリケーションをメタ データとともにList. 次のようにパッケージ名を取得できます。

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, packageManager.getLaunchIntentForPackage(packageInfo.packageName)); 
}
于 2014-01-31T22:02:39.833 に答える