位置: 编程技术 - 正文

[android] apk 版本升级(安卓版本apk)

编辑:rootadmin
[转自

推荐整理分享[android] apk 版本升级(安卓版本apk),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:apk for android,android apk downloads,android版app,安卓版本apk,android apk downloads,android apk downloads,android apk downloads,安卓版本apk,内容如对您有帮助,希望把文章链接给更多的朋友!

获取当前程序的版本号:

private String getVersionName() throws Exception{

//获取packagemanager的实例

PackageManager packageManager = getPackageManager();

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

PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(), 0);

return packInfo.versionName;

}

获取服务器端的版本号:

public static UpdataInfo getUpdataInfo(InputStream is) throws Exception{

XmlPullParser parser = Xml.newPullParser();

parser.setInput(is, "utf-8");//设置解析的数据源

int type = parser.getEventType();

UpdataInfo info = new UpdataInfo();//实体

while(type != XmlPullParser.END_DOCUMENT ){

switch (type) {

case XmlPullParser.START_TAG:

if("version".equals(parser.getName())){

info.setVersion(parser.nextText()); //获取版本号

}else if ("url".equals(parser.getName())){

info.setUrl(parser.nextText()); //获取要升级的APK文件

}else if ("description".equals(parser.getName())){

info.setDescription(parser.nextText()); //获取该文件的信息

}

break;

}

type = parser.next();

}

return info;

}

从服务器下载apk:

public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{

//如果相等的话表示当前的sdcard挂载在手机上并且是可用的

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout();

//获取到文件的大小

pd.setMax(conn.getContentLength());

InputStream is = conn.getInputStream();

File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");

FileOutputStream fos = new FileOutputStream(file);

BufferedInputStream bis = new BufferedInputStream(is);

byte[] buffer = new byte[];

int len ;

int total=0;

while((len =bis.read(buffer))!=-1){

fos.write(buffer, 0, len);

total&#;= len;

//获取当前下载量

pd.setProgress(total);

}

fos.close();

bis.close();

is.close();

return file;

}

else{

return null;

}

}

匹配、下载、自动安装:

public class CheckVersionTask implements Runnable{

public void run() {

try {

//从资源文件获取服务器 地址

String path = getResources().getString(R.string.serverurl);

//包装成url的对象

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout();

InputStream is =conn.getInputStream();

info = UpdataInfoParser.getUpdataInfo(is);

if(info.getVersion().equals(versionname)){

Log.i(TAG,"版本号相同无需升级");

LoginMain();

}else{

Log.i(TAG,"版本号不同 ,提示用户升级 ");

Message msg = new Message();

msg.what = UPDATA_CLIENT;

handler.sendMessage(msg);

}

} catch (Exception e) {

// 待处理

Message msg = new Message();

msg.what = GET_UNDATAINFO_ERROR;

handler.sendMessage(msg);

e.printStackTrace();

}

}

}

Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

super.handleMessage(msg);

switch (msg.what) {

case UPDATA_CLIENT:

//对话框通知用户升级程序

[android] apk 版本升级(安卓版本apk)

showUpdataDialog();

break;

case GET_UNDATAINFO_ERROR:

//服务器超时

Toast.makeText(getApplicationContext(), "获取服务器更新信息失败", 1).show();

LoginMain();

break;

case DOWN_ERROR:

//下载apk失败

Toast.makeText(getApplicationContext(), "下载新版本失败", 1).show();

LoginMain();

break;

}

}

};

protected void showUpdataDialog() {

AlertDialog.Builder builer = new Builder(this) ;

builer.setTitle("版本升级");

builer.setMessage(info.getDescription());

//当点确定按钮时从服务器上下载 新的apk 然后安装

builer.setPositiveButton("确定", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

Log.i(TAG,"下载apk,更新");

downLoadApk();

}

});

//当点取消按钮时进行登录

builer.setNegativeButton("取消", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

LoginMain();

}

});

AlertDialog dialog = builer.create();

dialog.show();

}

protected void downLoadApk() {

final ProgressDialog pd; //进度条对话框

pd = new ProgressDialog(this);

pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

pd.setMessage("正在下载更新");

pd.show();

new Thread(){

@Override

public void run() {

try {

File file = DownLoadManager.getFileFromServer(info.getUrl(), pd);

sleep();

installApk(file);

pd.dismiss(); //结束掉进度条对话框

} catch (Exception e) {

Message msg = new Message();

msg.what = DOWN_ERROR;

handler.sendMessage(msg);

e.printStackTrace();

}

}}.start();

}

//安装apk

protected void installApk(File file) {

Intent intent = new Intent();

//执行动作

intent.setAction(Intent.ACTION_VIEW);

//执行的数据类型

intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

startActivity(intent);

}

private void LoginMain(){

Intent intent = new Intent(this,MainActivity.class);

startActivity(intent);

//结束掉当前的activity

this.finish();

}

UpdataInfo:

public class UpdataInfo {

private String version;

private String url;

private String description;

public String getVersion() {

return version;

}

public void setVersion(String version) {

this.version = version;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

}

update.xml:

android加载大图片 Gallery配合ImageSwitcher加载大图片展示1.获得屏幕的宽高信息WindowManagerwm=getWindowManager();intscreenWidth=wm.getDefaultDisplay().getWidth();intscreenHeight=wm.getDefaultDisplay().g

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用 转自:

设置软键盘搜索键以及监听搜索键点击 设置软键盘搜索键以及监听搜索键点击1.LinearLayoutxmlns:android=

标签: 安卓版本apk

本文链接地址:https://www.jiuchutong.com/biancheng/382204.html 转载请保留说明!

上一篇:CheckedTextView的使用、学android疯狂讲义第二版遇到的问题希望能帮到和我一样的初学者、新手(textview hint)

下一篇:android加载大图片(android 加载大图)

  • 营业外收入纳税调整
  • 代收车船税如何计算
  • 暂估成本会计处理
  • 建筑简易征收需要成本发票吗
  • 小规模能开劳务费吗
  • 小企业货币资金1710元正常吗
  • 行政单位支出科目中组织事务是什么
  • 新会计准则下长期股权投资的变化
  • 退休工资要缴纳税吗
  • 外购货物应抵扣的进项税额税率
  • 商业企业向供货方收取的进场费,不可以开具增值税发票
  • 营业外收入在资产负债表怎么填
  • 分配的股息 要交所得税吗
  • 无形资产出售收入属于营业收入吗
  • 代开工资收服务费怎么做凭证?
  • 股权转让印花税税目怎么填
  • 计提税金与缴纳有差额
  • 出口退税账务处理例题
  • 房屋租赁合同印花
  • 增值税专用发票可以开电子发票吗
  • 劳务发票需要身份证原件吗
  • 接收境外汇款是什么意思
  • 技术开发费税收优惠政策
  • 普通发票要纳税吗
  • 外购的货物用于集体福利企业所得税
  • 专利代理服务费入账
  • 拆迁的支出费用包括哪些
  • 红字发票怎么填申报表表二
  • 大学期末 知乎
  • 华为分享怎么用详细教程
  • 劳保用品做账分录
  • 个体工商户应申报套餐无增值税吗
  • Win10 Build 19043.1266(21H1)更新已知问题汇总
  • 财务运作规律
  • 运输企业成本核算内容有哪些?
  • 夕阳下的大白鲨过山车,美国新泽西州 (© John Van Decker/Alamy)
  • pc端微信扫码支付
  • 三趾鹑是野鸡吗
  • php单链表使用场景
  • 农产品小规模纳税人
  • controller控制器怎么调
  • 留抵税额一般记哪个科目
  • 个体户办营业执照网上怎么申请
  • 财政补助结转和财政补助结余
  • phpmail
  • 织梦cms官网
  • 帝国cms移动端
  • 财务费用手续费在借方还是贷方
  • 股东向公司借款超过一年不还
  • 经营性应收项目的减少调增 为什么是减
  • 固定资产累计折旧计算公式
  • 一般纳税人开普票税率是3%还是13%
  • 酒吧会计如何做工作
  • 行政单位与事业单位净资产的比较
  • 旅客运输进项抵扣加计扣除怎么算
  • 有差价的商品发票怎么开
  • 收购一家公司需要多少股份
  • 固定资产原值如何计算
  • 开红字发票后再开蓝字发票如何入账
  • innodb_trx表
  • 电脑开机一直显示xp
  • 系统磁盘碎片整理
  • winex.exe - winex是什么进程
  • winxp开机启动程序
  • 把mac屏幕切换到桌面desktop
  • win7打开
  • win8更新设置
  • win10升级 其他用户
  • 笔记本电脑显示英特尔服务未在运行
  • 清理ie八
  • jquery的实现原理
  • 一篇文章让你彻底读懂德国历史
  • unity3D游戏开发
  • c# datetime.date
  • Embedded statement cannot be a declaration or labeled statement
  • [置顶]电影名字《收件人不详》
  • js跨域的几种方法
  • js的navigator
  • uk怎么查看发票开票额度
  • 税务一般纳税人可以简易注销
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设