Android的APK升级以及下载安装

其实要实现Android发布新版本的APK升级是一个简单的事情,只要你明白其中的道理和实现方法就能很快实现出来,废话不多说,下面我给大家简单介绍一下实现步骤:



1:要知道APK是否有升级更新就需要知道本地的app版本号,获取版本后很简单,简单几句代码:


下面就是写一个方法获取到版本号并把它返回

private int getLocalVersionCode() {
PackageManager pm = super.getPackageManager();
// cn.itcast.update
String packageName = super.getPackageName();
// 功能清单信息
PackageInfo info = null;
try {
info = pm.getPackageInfo(packageName,// 包名
0// 默认
);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 版本号
int code = info.versionCode;
return code;
}

获取到版本号之后接下来就是如何去检查APK是否有更新,要实现这一步需要在你的服务器写一个接口返回数据,注意:返回的数据需要包括你更新的版本号,每当进入程序就检测对比你本地获取到的版本号和服务器的版本号是否相同,如果不同就提示用户更新,如果相同就没提示;  (提示:每当你发布一个新版本后需要在服务器接口返回最新的版本号信息,每次更新也需要在你的工程项目build.gradle文件修改版本号,我用的是android studio改的是这个,eclipse开发的是AndroidManifest.xml文件)


实现更新的方法就我现在掌握的有两种,一种就是最简单的:当检测到有跟新提示是否更新点确定直接让他跳到浏览器去下载你最新版本apk的下载链接下载更新即可;



还有一种就是自己写一个文件下载,联网下载文件保存在本地



下面是一个联网下载APK文件的方法,使用的联网框架是AsyncHttpClient 如果没使用过的可以使用其他方法


private void downloadAPK() {


                 //APK的下载地址
String XZurl =“”;




final ProgressDialog dialog = new ProgressDialog(context);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setTitle("请稍后");
dialog.setMessage("拼命下载中.....");
dialog.setMax(100);
dialog.setProgress(0);
dialog.show();
final AsyncHttpClient client = new AsyncHttpClient();
final AsyncHttpResponseHandler responseHandler = new AsyncHttpResponseHandler() {
/**
* 访问成功
*/
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
File file = null;
try {
final ByteArrayInputStream bais = new ByteArrayInputStream(
responseBody);
final File dir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
file = new File(dir, "wanlianhui.apk");
final FileOutputStream fos = new FileOutputStream(file);
final DataOutputStream dos = new DataOutputStream(fos);
final byte[] buffer = new byte[1024];
int len = -1;
while ((len = bais.read(buffer)) != -1) {
dos.write(buffer, 0, len);
}
final int size = dos.size();
dos.close();
fos.close();
bais.close();
if (size == responseBody.length) {
dialog.dismiss();
Toast.makeText(context, "下载完成", Toast.LENGTH_SHORT)
.show();

installApk(file);   //这个就是你下载完成调用安装APK文件的方法,就在下面

}
} catch (Exception e) {
e.printStackTrace();
}
}


/**
* 显示进度条
*/
@Override
public void onProgress(int bytesWritten, int totalSize) {
final int progress = (int) (bytesWritten * 1.0 / totalSize * 100);
dialog.setProgress(progress);
}
/**
* 访问失败
*/
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
dialog.dismiss();
try {
String resu = new String(responseBody, "utf-8");
System.out.println("失败:" + resu);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
                    BaseApp.getInstance().showToast("下载失败");
}
NextOne();
Toast.makeText(context, "下载失败", Toast.LENGTH_LONG).show();
}
};
client.get(XZurl, responseHandler);
}



apk文件安装的方法

// 安装APK文件
private void installApk(File file) {
final Intent intent = new Intent();
intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
final MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
final String type = mimeTypeMap.getExtensionFromMimeType("apk");
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent);
}



这样就能简单实现APK更新了,希望对大家有用   (需要注意的是,APK包名需要保持一致,并且更新的版本号需要比上一个版本号高,这样才能覆盖上一个版本

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 11 中,可以使用 PackageInstaller API 来实现应用程序的静默升级。以下是实现静默升级的步骤: 1. 获取应用程序的 APK 文件。 2. 创建 PackageInstaller.SessionParams 对象。 3. 调用 PackageInstaller.createSession() 方法创建一个会话。 4. 通过会话 ID 打开输出流,并将 APK 文件写入输出流中。 5. 启动会话,等待应用程序安装完成。 以下是一个简单的示例代码: ```java private void installPackageSilently(String apkPath) { // 获取应用程序的 APK 文件 File apkFile = new File(apkPath); // 创建 PackageInstaller.SessionParams 对象 PackageInstaller.SessionParams params = new PackageInstaller.SessionParams( PackageInstaller.SessionParams.MODE_FULL_INSTALL); // 调用 PackageInstaller.createSession() 方法创建一个会话 PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller(); int sessionId = packageInstaller.createSession(params); try { // 通过会话 ID 打开输出流,并将 APK 文件写入输出流中 PackageInstaller.Session session = packageInstaller.openSession(sessionId); OutputStream out = session.openWrite("app", 0, -1); FileInputStream in = new FileInputStream(apkFile); byte[] buffer = new byte[65536]; int c; while ((c = in.read(buffer)) != -1) { out.write(buffer, 0, c); } session.fsync(out); in.close(); out.close(); // 启动会话,等待应用程序安装完成 session.commit(createIntentSender(context, sessionId)); } catch (IOException e) { e.printStackTrace(); } } private IntentSender createIntentSender(Context context, int sessionId) { Intent intent = new Intent(context, getClass()); intent.putExtra(EXTRA_SESSION_ID, sessionId); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); return pendingIntent.getIntentSender(); } ``` 需要注意的是,静默升级需要在系统签名的应用程序中运行,并且需要 android.permission.INSTALL_PACKAGES 权限。另外,如果应用程序已经在运行,则静默升级可能会失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值