android apk版本更新

/**

* 获取版本名称

*

* @return version

*/

private String getVersionName() {

try {

// 获取packagemanager的实例

PackageManager packageManager = getPackageManager();

// getPackageName()是你当前类的包名,0代表是获取版本信息

PackageInfo packInfo = packageManager.getPackageInfo(

getPackageName(), 0);

version = packInfo.versionName;// versionName是获取版本名称还有版本号等等...

} catch (NameNotFoundException e) {

e.printStackTrace();

}

return version;

}

activity类调用

// 这里来检测版本是否需要更新

UpdateManager mUpdateManager = new UpdateManager(

SettingActivity.this);

mUpdateManager.checkUpdateInfo();

public class UpdateManager {

private Context mContext;

/* 下载包安装路径 */

private static final String savePath = "//sdcard//updatedemo//";

private static final String saveFileName = savePath + "licaike.apk";

/* 进度条与通知ui刷新的handler和msg常量 */

private int progress;

private ProgressDialogUtil pdu;

private boolean interceptFlag = true;

@SuppressLint("HandlerLeak")

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 0x123:

pdu.setProgress(progress);

break;

case 0x124: // 安装apk

File apkfile = new File(saveFileName);

if (!apkfile.exists()) {

return;

}

Intent i = new Intent(Intent.ACTION_VIEW);

i.setDataAndType(Uri.parse("file://" + apkfile.toString()),

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

mContext.startActivity(i);

pdu.dismiss();

break;

default:

break;

}

};

};

public UpdateManager(Context context) {

this.mContext = context;

}

// 外部接口让主Activity调用

public void checkUpdateInfo() {

final AlertDialogUtil dialogUtil = new AlertDialogUtil(mContext, false,

null);

dialogUtil.setMessage("请更新新版本");

dialogUtil.setBtnPositiveValue("更新");

dialogUtil.setPositiveClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

showDownloadDialog();

dialogUtil.dismiss();

}

});

dialogUtil.setBtnNegativeValue("取消");

dialogUtil.setNegativeClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

dialogUtil.dismiss();

}

});

dialogUtil.show();

}

private void showDownloadDialog() {

// 下载apk

downLoadThread();

pdu = new ProgressDialogUtil(mContext, false, null);

pdu.setMessage("软件正在更新中...");

pdu.setBtnNegativeValue("取消");

pdu.setNegativeClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

interceptFlag = false;

pdu.dismiss();

}

});

pdu.show();

}

private void downLoadThread() {

new Thread(new Runnable() {

@Override

public void run() {

InputStream is = null;

FileOutputStream fos = null;

try {

// 返回的安装包url

String apkUrl = "http://d.m.hexun.com/app/licaike.apk";

URL url = new URL(apkUrl);

HttpURLConnection conn = (HttpURLConnection) url

.openConnection();

conn.connect();

int length = conn.getContentLength();

is = conn.getInputStream();

File file = new File(savePath);

if (!file.exists()) {

file.mkdir();

}

String apkFile = saveFileName;

File ApkFile = new File(apkFile);

fos = new FileOutputStream(ApkFile);

int count = 0;

byte buf[] = new byte[1024];

while (interceptFlag) {// 点击取消就停止下载.

int numread = is.read(buf);

count += numread;

progress = (int) (((float) count / length) * 100);

// 更新进度

mHandler.sendEmptyMessage(0x123);

if (numread <= 0) {

// 下载完成通知安装

mHandler.sendEmptyMessage(0x124);

break;

}

fos.write(buf, 0, numread);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (fos != null)

fos.close();

if (is != null)

is.close();

} catch (Exception e) {

} finally {

fos = null;

is = null;

}

}

}

}).start();

}

}

AlertDialog 工具类我的博客里写过了,你可以看看自己动手写,也可以粘贴过来用

http://blog.csdn.net/menglele1314/article/details/45718501

进度条你自己随便往对话框拖个

时间: 2024-10-09 09:13:22

android apk版本更新的相关文章

Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)

一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/data/com.zlc.ipanel.operate/FileOperate.apk";  Uri uri = Uri.fromFile(new File(fileName));  Intent intent = new Intent(Intent.ACTION_VIEW);  intent.se

Android程序版本更新--通知栏更新下载安装(转)

Android应用检查版本更新后,在通知栏下载,更新下载进度,下载完成自动安装,效果图如下: 检查当前版本号 AndroidManifest文件中的versionCode用来标识版本,在服务器放一个新版本的apk,versioncode大于当前版本,下面代码用来获取versioncode的值 PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); int

Android提示版本更新操作流程

2014年5月8日: andorid的app应用中都会有版本更新的操作,今天空闲的时候就花了点心思弄了一下,主要技术方面用到了AsyncTask异步加载.http协议.json解析.获取版本号等... 下面就来介绍一下大概的流程吧,首先呢: activity_main.xml: <Button android:id="@+id/chek_newest_version" android:layout_width="fill_parent" android:lay

反编译Android APK及防止APK程序被反编译

原文出处 反编译Android APK及防止APK程序被反编译 怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它 的做法,同时啊,还可以借鉴别人的软件结构,资源文件:作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.此方式主要目的是为了促进开发者学习,借鉴好的代

android apk 防止反编译技术第一篇-加壳技术

做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成果我会做成一个系列慢慢写出来与大家分享,共同进步.这篇主要讲apk的加壳技术,废话不多说了直接进入正题. 一.加壳技术原理 所谓apk的加壳技术和pc exe的加壳原理一样,就是在程序的外面再包裹上另外一段代码,保护里面的代码不被非法修改或反编译,在程序运行的时候优先取得程序的控制权做一些我们自己想

android apk 防止反编译技术第二篇-运行时修改字节码

上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止apk反编译的技术-运行时修改字节码.这种方法是在工作中在实现app wrapping时,看到国外的一篇关于android 安全的介绍实现的并且独创.下面我们来介绍一下这种方法. 我们知道apk生成后所有的java生成的class文件都被dx命令整合成了一个classes.dex文件,当apk运行时d

Android APK反编译详解(转)

转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件.   本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x

Android APK优化工具Zipalign详解

最近在googl play上发布apk要优化 Android SDK中包含一个"zipalign"的工具,它能够对打包的应用程序进行优化.在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率.因此,这种方式能够让应用程序和整个系统运行得更快.我们强烈推荐在新的和已经发布的程序上使用zipalign工具来得到优化后的版本 一.这里下载android SDK,只为了用他的zipalign工具,当然什么时候大家有兴趣了用来开发两个小程序也是很简单的 A

cocos2d jsb 打包 Android APK

1.首先要会普通的cpp 打包成Android APK 以下所说的是在cocos2d-x 2.2.2 或者 2.3 版本中.本文在Eclipse总用ndk编译cocos2d-x. 老生常谈cocos2d-x JSB不是简单的js代码,涉及到C++代码,如果是Android的话又涉及到Java代码,有点复杂,如果搞过Android下的Jni的话会熟悉些.可以看下这篇文章:<Android Jni 例子 Hello JNI,ndk> Android为了提高开发者开发应用的速度,降低难度,选择了Ja