android更新apk下载地址,android 更新下载apk

更新类保存

目前采用的是后台下载apk包,通知栏弹出提示并实时更新进度条的方式。最近似乎流行在首页直接下载安装,后台下载方式本意是让用户能在下载的时候去做其他操作的,但是如果我在使用的app马上要更新一个新包了,我实际上也不会去执行什么操作,比如微信更新包的时候,我不会在下载新包的间隙去聊天,因为马上就会弹出那个安装界面了,所以后台下载通知栏通知的更新方式其实并不是用户最希望的。相反,在点击下载更新按钮后,直接在当前页面呈现出下载进度,让用户能精确的知道更新进度,同时提供一个后台下载按钮,让用户在网络情况不佳的情况下有可以在后台下载的选择,这种体验应该是比较好的。

代码有些部分使用了自定义工具库,看代码应该就知道作用.

/**

* 更新类

* Created by sy on 2015/8/5.

*/

public class UpdataUtil {

public static int lastProgress = 0;

public final static int updateId = 88888;

public static void updateApk(final Context context, String url) {

StaticMethod.debugEMSG(StaticMethod.getApkPath());

//检测当前是否在下载更新,防止多次重复下载

if (!(Boolean) SPUtil.get(context, "isUpdate", false)) {

//锁定下载更新

SPUtil.put(context, "isUpdate", true);

//发送通知

final NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);

final Notification notification = new Notification(R.drawable.push, "正在下载", System.currentTimeMillis());

notification.contentView = new RemoteViews(context.getPackageName(), R.layout.update_notification_layout);

notification.flags = Notification.FLAG_ONGOING_EVENT;

notification.contentView.setTextViewText(R.id.update_title, context.getResources().getString(R.string.app_name) + "正在更新");

notificationManager.notify(updateId, notification);

//开始下载

HttpUtil.mHttpClient.get(url, new BinaryHttpResponseHandler() {

@Override

public void onProgress(long bytesWritten, long totalSize) {

super.onProgress(bytesWritten, totalSize);

int nowProgress = (int) ((bytesWritten / (double) totalSize) * 100);

if (nowProgress != lastProgress) {

notification.contentView.setTextViewText(R.id.update_tv, nowProgress + "%");

notification.contentView.setProgressBar(R.id.update_pb, 100, nowProgress, false);

notificationManager.notify(updateId, notification);

}

lastProgress = nowProgress;

}

@Override

public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] binaryData) {

StaticMethod.debugEMSG("下载成功");

notificationManager.cancel(updateId);

//解锁下载更新

SPUtil.put(context, "isUpdate", false);

//把数据存到sd上

File file = new File(StaticMethod.getApkPath());

FileOutputStream fos = null;

try {

fos = new FileOutputStream(file);

fos.write(binaryData, 0, binaryData.length);

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

//开始安装

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(file),

"application/vnd.android.package-archive");

context.startActivity(intent);

}

@Override

public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] binaryData, Throwable error) {

StaticMethod.showMSG(context, "更新失败,错误代码:" + statusCode);

SPUtil.put(context, "isUpdate", false);

}

});

} else {

StaticMethod.showMSG(context, "正在下载更新包,请稍后");

}

}

}

原文:http://www.cnblogs.com/sun-yang-/p/5166159.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值