如何理解'默认启动程序以编程方式?快捷方式失去了标题

时间:2015-06-23 15:52:33

标签: java android android-intent android-launcher android-package-managers

到目前为止我做了什么:

我当前正面临着发射器的一些问题。 我的应用程序将快捷方式添加到启动器的工作区(主屏幕)。 但在某些设备(Samsum Duos)上,例如标题和/或图标 重启更改为我的默认应用程序。

所以我目前正在浏览android中的1000行代码 确定问题的来源,但无法找到它。

我在InstallShortcutReceiver看到了 183 中的评论" name"由Intent.EXTRA_SHORTCUT_NAME提供 某些情况仅用于比较等,将被替换 使用应用程序默认名称。

    // This name is only used for comparisons and notifications, so fall back to activity name
    // if not supplied

但是(我的Samsum Duos根深蒂固)我可以找到完整的信息 关于 launcher.db 内的单元格位置和shortcutInfo。

重启后,消失了,但可能只是不正确已初始化

  1. 第一个问题:
  2. 是否有人知道自定义的,以编程方式创建的快捷方式,将标题和/或图标更改回创建它的应用程序?

    下一个故事:

    我注意到这个问题在我的Samsum Duos上是可以重现的,所以我决定了 从我的"保存启动器"中排除设备启动器列表。

    要接收默认启动器,我将执行以下操作:

        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        ResolveInfo resolveInfo = null;
        try {
            resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); //can return null!
        }catch(RuntimeException e){
            ExceptionHandler.logAndSendException(e);//package manager has died
            return false;
        }
    

    但现在的问题是,它始终返回默认的启动器 包是:com.android.launcher2.Launcher,这将是标准 android stock启动器。但我知道Samsum使用 TouchWiz home launcher,whos包位于 com.sec.android.app.launcher 下! 这也是我找到launcher.db及其所有ShortcutInfo的地方。

    2。第二个问题

    如何重现正确的默认启动程序包以进行识别 使用哪个发射器?

    修改

    我有点修复第二个问题。不知怎的,我来自 ResolveInfo PackageManager似乎不可靠

    对于Samsum Duos,我得到了:

    resolveInfo.activityInfo.name = com.android.launcher2.Launcher
    resolveInfo.activityInfo.packageName = com.sec.android.app.launcher //this is what I need
    

    但对于Redmi MIUI:

      resolveInfo.activityInfo.name = com.miui.home.launcher.Launcher //this time I would need this
      resolveInfo.activityInfo.packageName = com.miui.home //the packageName is not complete!
    

    我需要一个发射器的唯一标识符!所以我认为 activityInfo.name 就是 要走的路,但在某些情况下并非如此。而packageManager似乎适用于太多设备。有什么建议吗?

    干杯!

0 个答案:

没有答案