如何在Android 2.3及更高版本中获取当前启动器的软件包名称?

2022-09-01 10:25:53

如何在Java中以编程方式获取Android 2.3及更高版本中当前启动器的软件包名称?


答案 1

我认为你应该能够使用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;

答案 2

随着 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


推荐