【问题标题】:How do I set my application to default on a rooted device如何在有根设备上将我的应用程序设置为默认值
【发布时间】:2015-03-31 19:57:05
【问题描述】:

我们有一个平板电脑应用,正在零售店部署。它目前在深夜自我更新,但它不再是默认的“家庭”应用程序,用户可以选择再次启动我们的应用程序或默认启动器。即使在更新后,我们也希望始终让我们的应用成为默认的家庭应用。有没有办法在有根设备上执行此操作?

这是一个基于 ICS 的设备,因此 addPreferredActivity 似乎不起作用,因为即使设备已植根,我也无法获得 android.permission.SET_PREFERRED_APPLICATIONS 权限。如果有办法解决这个问题,我想我可以做到这一点..

【问题讨论】:

  • 我不知道这是否可行,但是您是否尝试过删除默认启动器,以便您的启动器是设备上唯一的启动器?
  • 我希望设备的其余部分尽可能有库存。我假设某处有一些偏好可以控制用户最后的“默认应用”选择。因为我完全控制了设备,所以我认为我可以得到这个有趣的部分并将其设置为我心中的愿望。

标签: android


【解决方案1】:

有没有办法在有根设备上执行此操作?

最简单的解决方案是您在评论中拒绝的解决方案:删除库存启动器并让您成为唯一的启动器。

这是一个基于 ICS 的设备,因此 addPreferredActivity 似乎不起作用,因为即使设备已植根,我也无法获得 android.permission.SET_PREFERRED_APPLICATIONS 权限。

Root 本身与权限无关。在这种情况下,SET_PREFERRED_APPLICATIONS 是签名级别的权限,这意味着您的应用必须使用与固件相同的签名密钥进行签名,除非您推出自己的改装 ROM,否则这是不可能的。

如果我正确阅读the Android source codeaddPreferredActivity() 的结果将在/data/system/packages.xml 中以<preferred-activities> 元素结束。尝试非常仔细地修改该文件,看看是否能得到你想要的。

【讨论】:

  • 我认为我走在正确的道路上。我能够从我的应用程序中更新该文件,并拉取文件并查看它的内容是否正确(与 android 本身的方式进行比较之前修改过文件)。唯一的问题是它似乎忽略了更改的文件。你知道如何强制它重新加载那些首选活动,因为它必须将它们缓存在内存中。
  • @danb:“唯一的问题是它似乎忽略了更改的文件。” - 哦耶。事后看来,这并不奇怪。 “你知道如何强制它重新加载那些首选活动,因为它必须将它们缓存在内存中” - 是的,我相信它是。创建PackageManagerService 时会读取该文件,但我知道强制该代码路径的唯一方法是重新启动。虽然不理想,但由于您必须在自我升级后手动对设备大惊小怪(不能默默地这样做,需要用户输入),也许重新启动就足够了。
  • 这行得通,顺便说一句。当我们的应用程序完成自身更新后,它现在会更改 packages.xml 文件并重新启动设备并立即启动我们的应用程序,这是一个非常流畅且轻松的升级。
  • 我试图在 android 4.2.2 上转储这个文件,但是没有 标签。有人知道它去了哪里吗?我肯定设置了一些默认应用程序。
  • 在 /data/system/users/0/package-restrictions.xml 中找到它
【解决方案2】:

有时会发生某些应用程序无法在 root 设备中正常工作我的设备中也有同样的问题(也是 Rooted)。所以我只有一种方法可以再次安装操作系统,所以我使用一些软件(如superoneclick)并使用它我取消我的设备并重新安装操作系统。那么该应用程序可以完美运行,所以如果可能的话,您可能还应该取消您的设备的根目录。

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 2021-06-14
    • 2019-03-13
    • 2019-01-09
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多