如何仅在插入时允许Play商店中的应用自动更新?


14

我希望在插入手机(收费)和wifi时自动更新应用程序。仅当在Play商店设置中使用适当的选项打开wifi时,我才能轻松允许自动更新,但是如果手机使用电池供电,则无法阻止自动更新。

当我在家中通过wifi使用手机时,这会导致不必要的电池消耗。鉴于自动更新应用程序不是时间紧迫的任务,而是更多的后台工作,我不认为这不是标准的节能策略。

您是否知道实现此目的的任何应用程序或系统解决方法(包括设备是否已植根)?

Answers:


4

注意事项

解决方案:

  • 已在Android 4.2.1,COS12(Android 5.0.2)和CM12.1(Android 5.1.1)上进行了测试-所有这些都运行Play商店v6.0.5 1
  • 需要扎根的Android
  • 是解决方案的简短演示

浏览Play商店的清单时,我有一个有根据的猜测,即只有以下服务可能是通过Wi-Fi自动更新应用程序的发起者。

com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager$CheckWifiAndAutoUpdate

我在少数情况下在不同设备上使用该服务,发现它对于所讨论的目标很有用。不用说,应用程序的自动更新设置应在Play商店中设置为“仅通过Wi-Fi自动更新应用程序”。

您可以执行以下操作:安装一个应用程序,该应用程序在连接电源和Wi-Fi以及稍后断开连接时可以执行一系列操作。我用塔斯克试用版 ; userguide)作为自动化应用。

我们将需要两个任务:一个入口任务和一个出口任务。见我的答案在这里对相关的帮助。

  • 输入任务:(操作):

    1. 代码→运行Shell

      • 命令:

        pm启用com.android.vending / com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager \ $ CheckWifiAndAutoUpdate;
        是强制停止com.android.vending;
        是startservice com.android.vending / com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager \ $ CheckWifiAndAutoUpdate
        
      • 勾选使用根
    2. 您可以选择添加一个或多个操作来通知自己更新过程已开始。我使用Alert→Flash通过烤面包来通知自己。
  • 退出任务:(操作):

    此任务需要安装Busybox的applet。请参阅如何在Android设备上安装缺少的命令行工具?寻求相关帮助。

    1. 网→测试网

      • 类型:启用移动数据
      • 将结果存储在: %Mdata
    2. 代码→运行Shell

      • 命令:

        svc数据禁用;
        svc wifi disable;
        是强制停止com.android.vending;
        强制停止com.android.providers.downloads;
        down_path = $(内容查询--uri内容:// downloads / my_downloads --projection _data-其中“ notificationpackage ='com.android.vending'”);
        [[“ $ down_path”!=“未找到结果。” ]] && echo $ down_path | sed's /.*=// g'| xargs rm -f || 回声继续;
        内容删除--uri内容:// downloads / my_downloads-其中“ notificationpackage ='com.android.vending'”
        pm禁用com.android.vending / com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager \ $ CheckWifiAndAutoUpdate;
        svc wifi启用;
        [[“”%Mdata“ ==”是“]] && svc数据启用|| 回声什么都不做;
        
      • 勾选使用根
    3. 同样,要通知自己,请使用您选择的任何操作。

这些任务是做什么的?

当两个上下文的条件都满足时,将运行enter任务。该任务中的命令按顺序执行以下操作:

  • 启用上述Play商店的服务
  • 强制停止Play商店
  • 启动上述Play商店的服务

这就是开始自动更新的全部。

保持激活状态后,无论何时停用配置文件(仅仅是因为上下文的条件不再满足),退出任务都会运行。该退出任务按顺序执行以下步骤:

  • 将移动数据的状态(启用/禁用)存储在变量Mdata中
  • 这些命令的工作是:

    • 禁用移动数据
    • 禁用Wi-Fi
    • 强制停止Play商店
    • 强制停止下载管理器

    我注意到,如果由于无法使用Wi-Fi而中断应用程序的更新(正在进行下载),则进度条(通知)被取消,进度状态存储在数据库下载的表下载行中.db。(该数据库位于下载管理器的数据目录下。)该行还包含部分下载的文件的位置。

    为了确保自动更新不会在下一次成功连接到Wi-Fi时发生,并确保当配置文件未运行enter任务时自动更新从未发生,以下是其余命令:

    • 从与_datacom.android.vending标识为Notificationpackage的行相对应的列中的值中提取部分下载的文件的位置。我们旨在删除该文件。这是一个小的牺牲。
    • 如果_data下确实存在文件路径,则使用它删除其指向的文件。
    • 删除该行,否则,当网络连接更改(重新连接到Wi-Fi)并且重新开始自动更新时,Download Manager会读取该行。
    • 禁用上述Play商店服务,以便自动更新永远不会自己开始
    • 启用Wi-Fi
    • 启用移动数据(如果在运行此任务之前已启用)。

1在创建此答案的第一个修订版时,当前的Play商店版本肯定不是6.0.5,而是更高版本。但是,到目前为止,我的设备都没有收到Play商店的任何进一步更新。


该脚本对我不起作用,因此只是一个小的故障排除步骤,我手动运行了“内容查询”命令,并注意到它确实导致了“未找到结果”字符串,因此下一行“内容删除”没有任何作用,因为IF条件不成立。
prl77

2

我最近来的是结合两个设置。我在两台设备上执行此操作,一台运行Android 4.4.4(KitKat),另一台运行Android 5.0.2(Lollipop)。

  • 系统设置→Wi-Fi→高级→睡眠期间保持Wi-Fi开启→仅在插入时
  • 播放商店→设置→自动更新应用程序→仅通过Wi-Fi自动更新应用程序

它似乎在插入时至少会更频繁地获取更新。虽然它不是完美的,但它并不是一个好的解决方案,并且不需要Tasker或生根。


0

这可以使用Tasker(付费应用程序)来实现。在Tasker中,概要文件可以定义为具有以下条件。它几乎没有学习曲线,但是该应用程序可以替代几乎所有应用程序。

以下是样本资料,

电池> X%Wifi开启已启用充电时

启用自动同步

这只是示例之一,您可以根据需要指定条件。由于这是一个单独的主题,我鼓励您在xda论坛中使用Google Tasker。


3
这样是否不会为所有数据启用/禁用所有自动同步功能?不得不手动刷新所有其他服务,以使Play商店无法自动更新似乎不太理想。
Buster先生2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.