アンドロイド2.3以降の現在のランチャーのパッケージ名をJavaでプログラム的に取得するにはどうすればよいですか?
3 に答える
ホームインテントでPackageManager.resolveActivity()を使用できるはずだと思います。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
String currentHomePackage = resolveInfo.activityInfo.packageName;
Android 11で導入されたパッケージの可視性の変更により、デフォルトのホーム(別名ランチャー)アクティビティのPackageManager.resolveActivity(intent:flags :)メソッドをクエリする前に、以下のようにアプリケーションのマニフェストファイルにクエリ要素を追加する必要があります。これは、このスレッドで受け入れられた回答で説明されているように、デバイスにインストールされています。
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
</intent>
</queries>
このクエリ要素がアプリケーションのマニフェストから省略されている場合、デバイスはcom.android.settings.FallbackHome
アクティビティをデフォルトのホームアクティビティとして報告しますが、これはおそらくあなたが望むものではありません。
一般的に、私はPMresolveActivityを使用して@JesusFrekeに同意します
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
ただし、正しいパッケージ名を取得するには、次を使用する必要があります
resolveInfo.loadLabel(packageManager).toString()
また
resolveInfo.activityInfo.applicationInfo.loadLabel(packageManager).toString()
ヒント:デフォルトが設定されていない場合、一般的なSystemIntentReceiverの場合は「AndroidSystem」または「open」になる可能性があります
ヒント:Webブラウザーを探している場合は、明示的なセットが1つもない場合でも、 net.openid.appauth.browser.BrowserSelector#select()
(0.7.1+)を使用してデフォルトのブラウザーを暗黙的に取得できます。