android 后台更新apk,Android APK更新和注意事项

本文介绍了Android应用后台自动更新APK的流程,包括使用DownloadManager进行下载,更新内容实体类和下载进度监听接口的定义,以及相关工具类和权限配置的详细步骤。通过DownloadUtils类,实现了从请求更新内容到下载、安装的完整过程。
摘要由CSDN通过智能技术生成

一、应用场景及介绍

不多讲,APP更新几乎每个APP都会用到。

更新APP的选择:

一、根据自己APP使用的网格框架,自己写一套下载的逻辑,移植兼容性不强。

二、用系统的下载器(DownloadManager),移植没兼容性问题。

二、更新的展示方式

APP内UI直接展示。

退到后台,通知栏更新。

三、更新内容分析

APK下载的URL,APK的版本号。

本地存储路径,APK本地存储名称等。

下载进度的回调,用于内部UI更新。

四、创建更新内容实体类

/**

* 更新apk的Bean

*/

public class AppUpdateBean implements Serializable {

// 更新APK的URL

private String apkUrl;

// 后台最新的版本号

private int versionCode;

// ==============附加信息可以不填写==============

// apk文件名称(本地的名称)

private String apkName;

public AppUpdateBean(String apkUrl, String apkName, int versionCode) {

this.apkUrl = apkUrl;

this.apkName = apkName;

this.versionCode = versionCode;

}

public String getApkUrl() {

return apkUrl;

}

public int getVersionCode() {

return versionCode;

}

public String getApkName() {

return apkName;

}

}

五、定义下载进度回调监听接口

/**

* 更新APK的监听

*/

public abstract class OnUpdateListener implements Serializable {

/**

* 下载失败

*/

public abstract void onFailed(String msg);

/**

* 下载成功

*/

public abstract void onSucceed(File apkFile);

/**

* 下载进度

* @param total 总APK大小

* @param current 当前进度

* @param progress 进度百分比

*/

public abstract void onProgress(int total, int current, float progress);

}

六、更新步骤分析

请求后台获取更新APK的内容。

判断后台APK的版本和当前使用APK的版本号,根据版本号情况进行更新。

下载前,判断本地有没有下载好,下载好根据版本号情况直接安装或者重装下载。

七、使用DownloadManager下载器进行下载更新

/**

* 下载更新APP的工具类

*/

public class DownloadUtils {

private static final String CONFIG = "APK_UPDATE";

private static final String DOWNLOADED = "DOWNLOADED";

// 默认APK本地名称

public static final String DEF_APK_NAME = "update.apk";

private final SharedPreferences mPreferences;

// 下载器

private DownloadManager downloadManager;

private Context mContext;

// 下载的ID

private long downloadId = -1;

// 下载要用到的类

private AppUpdateBean mUpdateBean;

private OnUpdateListener mOnUpdateListener;

private static Handler mHandler = new Handler(Looper.getMainLooper());

public DownloadUtils(Context context, AppUpdateBean updateBean) {

if (mContext == null) {

new RuntimeException("context is null");

}

this.mContext = context.getApplicationContext();

this.mUpdateBean = updateBean;

mPreferences = mContext.getSharedPreferences(CONFIG, Context.MODE_PRIVATE);

}

/**

* 注意:要自己添加内存卡读取权限

* 下载apk主要方法

*/

public void downloadAPK() {

// 1. 非空校验

if (mContext == null || mUpdateBean == null) {

return;

}

// 2. URL校验

String url = mUpdateBean.getApkUrl();

if (Te

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 在切入后台后会暂停所有正在进行的操作,包括 APK 的安装过程。因此,如果用户在 APK 安装过程中切入后台,那么 APK 安装过程会被暂停。 如果你想让 APK 在切入后台后自动安装,可以考虑使用服务来安装 APK。具体来说,你可以在服务中使用 Intent 来启动系统的安装程序来安装 APK。这样,即使用户切入后台,服务仍然在后台运行,安装程序也会在后台自动安装 APK。 下面是一个示例代码,用于在服务中安装 APK: ``` public class ApkInstallService extends Service { private String mApkFilePath; @Override public int onStartCommand(Intent intent, int flags, int startId) { if (intent != null) { mApkFilePath = intent.getStringExtra("apk_file_path"); if (mApkFilePath != null) { installApk(); } } return super.onStartCommand(intent, flags, startId); } private void installApk() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(mApkFilePath)), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } } ``` 在你的 Activity 中,你可以通过以下代码来启动服务: ``` Intent intent = new Intent(this, ApkInstallService.class); intent.putExtra("apk_file_path", "your_apk_file_path"); startService(intent); ``` 这样,即使用户在 APK 安装过程中切入后台,服务仍然会在后台运行,安装程序也会在后台自动安装 APK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值