以编程方式检查Android OTA系统更新

6
如果您进入“设置”->“关于手机”->“检查更新”,将启动检查,以查看是否有适用于您的手机的系统更新。
我应该如何以编程方式执行此操作?此外,我正在尝试找到Android源代码中发生这种情况的位置,以便我可以完全了解并更好地理解它。有人有什么建议吗?
1个回答

9
据我所知,目前尚无已知的广播、意图或API可通过程序实现此操作。同时,这也取决于ROM和制造商。
例如,Sony使用一项服务,在wifi被激活时,该服务会检查Sony的服务器是否有任何更新并通知用户。但是,当谈到AOSP源代码时,我认为这种情况不会发生。
packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java中可以找到最接近“系统更新”的地方。
提示:在res/values目录中搜索字符串“System update”,向后工作并找出该字符串变量标识符的使用位置!
编辑:下面是一个广播接收器示例:
public class SystemUpdateClass extends BroadcastReceiver{
   @Override
   public void onReceive(Context context, Intent intent){
      if (intent.getAction().equals("android.settings.SYSTEM_UPDATE_SETTINGS")){
           Toast.makeText(context, 
                 "Yup! Received a system update broadcast", 
                 Toast.LENGTH_SHORT).show();
      }
   }
}

这是一个示例代码,位于活动的onCreate中:

SystemUpdateClass sysUpdate = new SystemUpdateClass();
IntentFilter filter = new IntentFilter();
filter.addAction("android.settings.SYSTEM_UPDATE_SETTINGS");
registerReceiver(sysUpdate, filter);

现在,您的应用程序应该接收到广播,除非我搞错了,该广播只针对系统签名应用程序...但是其余部分留作练习 :)

我最远到达的是:从/packages/apps/Settings/res/xml/device_info_settings.xml中的system_update_settings键,<intent android:action="android.settings.SYSTEM_UPDATE_SETTINGS" />。 - CompEng88
我需要找到具有此操作(android.settings.SYSTEM_UPDATE_SETTINGS)的意图过滤器的系统活动代码。有什么建议如何找到它吗? - CompEng88
请再次阅读我的回答,目前没有已知的广播/意图或API可用。 :) 您可以尝试创建一个小应用程序来注册该广播,并查看发生了什么-如果您的小应用程序接收到广播-然后执行必要的操作... 至于我所说的内容,制造商使用自己的实现... - t0mm13b
所以,换句话说,在AOSP中,android.settings.SYSTEM_UPDATE_SETTINGS操作被广播,但没有任何活动接收它?我怀疑这一点,因为http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.4_r1.2/com/android/settings/Utils.java#90第101行使用PackageManager查找所有过滤该操作的活动,并像106一样选择第一个系统活动。在某个地方,有一个系统活动具有过滤android.settings.SYSTEM_UPDATE_SETTINGS操作的意图过滤器。 - CompEng88
是的,没错,没有任何活动接收到那个广播!至于 grepcode 链接中的 Utils 源代码,它是用于将首选项解析为活动“updatePreferenceToSpecificActivityOrRemove”的,我没有看到你所声称的那个意图的参考...这是对你的挑战-在源代码中全局搜索该意图字符串。正如我所说,它取决于 ROM 制造商,也许 Sony/Samsung/Motorola/HTC 使用自己的定制广播或修改以适应其需求! - t0mm13b
如果你跟踪到足够深的话,updatePreferenceToSpecificActivityOrRemove() 用于查找系统活动以执行该操作(否则,偏好设置不会出现在设置屏幕中)。参见:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.4_r1.2/com/android/settings/DeviceInfoSettings.java#105 - CompEng88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接