如何在 android 2.3 及更高版本中获取当前启动器的包名?
Posted
技术标签:
【中文标题】如何在 android 2.3 及更高版本中获取当前启动器的包名?【英文标题】:How can I get the package name of the current launcher in android 2.3 and above? 【发布时间】:2012-05-07 20:36:50 【问题描述】:如何在 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;
【讨论】:
如果没有选择“默认”启动器,它只返回“android”。这不是常见的情况,但它确实发生了。 请注意,如果没有匹配,它将返回 NULL,并且您将在最后一行得到 NPE! 是的,这是说明解决方案的说明性代码,不应按原样用于“生产”用途。此外,如果您的手机没有家庭应用程序...您可能还有其他问题:) 对于想要在 Android 11+ 设备上运行此答案中的代码块的任何人,请参阅我的答案 here 关于您应该考虑的 Android 11 包可见性更改。【参考方案2】:使用 Android 11 中引入的 package visibility changes,现在需要在应用程序的清单文件中添加一个 queries 元素,如下所示,然后才能查询默认主页(又名启动器)活动的 PackageManager.resolveActivity(intent:flags:) 方法安装在设备上,如该线程中的accepted answer 所述:
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
</intent>
</queries>
如果您的应用程序清单中省略了此 queries 元素,则设备会将 com.android.settings.FallbackHome
活动报告为其默认主页活动,这很可能不是您想要的。
【讨论】:
【参考方案3】:一般来说,I agree to @JesusFreke 使用 PM resolveActivity
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()
提示: 如果没有默认设置,这可能会变成“Android System”或“open”,就像一般的 System Intent Receiver 一样
提示:
如果您正在寻找网络浏览器,您可以使用net.openid.appauth.browser.BrowserSelector#select()
(0.7.1+) 来隐式获取默认浏览器,即使没有明确设置。
【讨论】:
这是应用程序的可读名称,而不是包名称。以上是关于如何在 android 2.3 及更高版本中获取当前启动器的包名?的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 9 及更高版本中,如何获取周围所有基站的 CID 和信号强度?
您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?
如何使用 Target API 23 及更高版本通过 GPS 获取用户位置
Xamarin Forms Android 10 及更高版本在公共外部存储中按文件名查找视频并获取路径