Android在后台更新应用

时间:2013-01-24 12:00:42

标签: android

此应用不在Google Play上。我可以从服务器手动更新,但我想自动更新,就像在谷歌播放中一样,它会在bg中自动更新,并在通知栏中显示。

我该怎么做?

由于

4 个答案:

答案 0 :(得分:0)

是的,要在后台更新您的数据/ APK,您可以使用GCM(Google云消息传递)推送通知。

为此,您可以在应用程序启动时询问用户在更改时从服务器更新数据/ APK。现在,当数据从服务器更改时,您只需向设备发送推送通知并在后台更新数据即可。如果APK然后下载并将其安装在设备中。

您将获得更多详细信息Google Cloud Messaging for Android | Android Developers

希望它会有所帮助。

答案 1 :(得分:0)

您可以设置定期运行的服务,并检查服务器是否有可用的更新(检查APK的时间戳是一种检查方式)。

然后下载APK。安装它,并发送通知。

这是一件很复杂的事情,如果你可以提供帮助,可能不是你想要做的事情。 (为什么不在Play Market?)

答案 2 :(得分:0)

看看this solution如何通过url安装apk或者你想安装本地apk文件already downloaded to the device

如何确定有更新?定期轮询您的服务器,或者使用Google Cloud Messaging或类似服务器。

答案 3 :(得分:0)

遵循此link,应用内更新仅适用于运行Android 5.0(API级别21)或更高版本的设备,并且要求您使用Play Core库1.5.0或更高版本。 类型:

  • 灵活
  • 立即

注意:当您向应用发布Android应用捆绑包时,使用应用内更新的应用允许的最大压缩下载大小为150MB。应用内更新与使用APK扩展文件(.obb文件)的应用不兼容。

检查更新可用性

// Creates instance of the manager.
AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);

// Returns an intent object that you use to check for an update.
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          // For a flexible update, use AppUpdateType.FLEXIBLE
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
              // Request the update.
    }
});

开始更新

appUpdateManager.startUpdateFlowForResult(
    // Pass the intent that is returned by 'getAppUpdateInfo()'.
    appUpdateInfo,
    // Or 'AppUpdateType.FLEXIBLE' for flexible updates.
    AppUpdateType.IMMEDIATE,
    // The current activity making the update request.
    this,
    // Include a request code to later monitor this update request.
    MY_REQUEST_CODE);

您请求的更新类型决定了您需要采取的下一步。要了解更多信息,请阅读有关如何Handle an immediate updateHandle a flexible update.

的部分

获取更新状态的回调

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (myRequestCode == MY_REQUEST_CODE) {
    if (myRequestCode != RESULT_OK) {
      log("Update flow failed! Result code: " + resultCode);
      // If the update is cancelled or fails,
      // you can request to start the update again.
    }
  }
}

有关共享代码检出链接的实现的更多信息