【问题标题】:How to get the package name of current launcher in android?如何在android中获取当前启动器的包名?
【发布时间】:2014-09-23 05:06:34
【问题描述】:

我想获取我当前安装的当前启动器的包名。我尝试使用链接http://stackoverflow.com/questions/10344824/how-can-i-get-the-package-name-of-the-current-launcher-in-android-2-3-and-above

但它给出的结果为“android”。我想要完整的启动器名称。

我想要安装的启动器列表并选择当前的启动器

提前致谢

【问题讨论】:

  • 不,你不需要包名。您只需要创建一个隐式意图,而不是显式意图。
  • @StephanBranczyk 请详细说明你的答案..
  • 我在你编辑之前回复了你的帖子。您是否正在尝试制作自己的启动器?您是否正在尝试制作自己的发射器选择器?你的最终目标是什么?
  • @StephanBranczyk 我的最终目标是仅在我位于主屏幕时才启动特定服务。他们可能是正在安装的任何第 3 方启动器

标签: android


【解决方案1】:

您可以使用以下代码获取当前启动器包名称:

PackageManager localPackageManager = getPackageManager();
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.HOME");
String str = localPackageManager
        .resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY)
        .activityInfo
        .packageName;
Log.e("Current launcher Package Name:", str);

【讨论】:

  • 又短又甜。谢谢。
  • 它可以工作,但是当在 oneplus 设备中按 Home 键时,它无法获取启动器包名称
【解决方案2】:

作为 Fede 在Get a list of every launcher in Android 中的回答

获取所有已安装启动器的列表。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> lst = getPackageManager().queryIntentActivities(intent, 0);
if (!lst.isEmpty()) {
   for (ResolveInfo resolveInfo : lst) {
        Log.d("Test", "New Launcher Found: " + resolveInfo.activityInfo.packageName);
   }
}

【讨论】:

  • 这并不能确保第一个结果是当前正在使用的结果(正如问题特别要求的那样),并且实际上根本没有尝试确定正在使用的结果。
【解决方案3】:

以下代码可以完美地获取当前启动器应用程序包名称。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
String currentLauncherName= resolveInfo.activityInfo.packageName;
Log.d("Current Launcher: ", currentLauncherName);

【讨论】:

    【解决方案4】:

    使用 Android 11 中引入的package visibility changes,现在需要在应用程序的清单文件中添加一个queries 元素,如下所示,然后才能查询家庭的PackageManager.resolveActivity(intent:flags:)PackageManager.queryIntentActivities(intent:flags:) 等方法之一(又名启动器)安装在设备上的活动,如该线程的其他答案中所述:

    <queries>
        <intent>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
        </intent>
    </queries>
    

    如果您的应用程序清单中省略了此queries 元素,则设备会将com.android.settings.FallbackHome 活动报告为设备上安装的唯一家庭活动。

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 2012-04-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多