如何通过Java编程,在Android 2.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;
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
</intent>
</queries>
com.android.settings.FallbackHome
活动作为其默认主页活动,这很可能不是您想要的。一般来说,我同意@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系统”或“open”,适用于一般的系统意图接收器。
提示:
如果您正在寻找网络浏览器,您可以使用net.openid.appauth.browser.BrowserSelector#select()
(0.7.1+)来隐式获取默认浏览器,即使没有明确设置。