android软件更新

原创 2015年07月09日 14:52:00

软件更新地址:
http://angelsystem.ourangel.cn/Download/app/android/courier.1.0.apk

public void click(View v)
{
    case R.id.layout_updateId_setting:
            {
                 hasNewerSoftware();
                //软件升级
                break;
            }
}

  /**
     *
     * 判断当前软件是否需要更新
     * **/
    private void hasNewerSoftware()
    {
        String url = RequestUrl.URL + RequestUrl.UpdataSoftware + "&account=123";
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                try {
                    if (jsonObject.getString("resultCode").equals("00000")) {
                        mJsonObject = jsonObject;
                        JSONObject data = jsonObject.getJSONObject("data");

                        /*****************服务器软版本号******************/
                        String updateSoftwareUrl = data.getString("updateSoftwareUrl");
                        String softWareName = updateSoftwareUrl.substring(updateSoftwareUrl.lastIndexOf("/") + 1);
                        int start = "courier.".length();
                        String newVersion = softWareName.substring(start,softWareName.indexOf(".apk"));   //courier.1.0.apk
                        /*****************服务器软版本号******************/


                        /*************当前软件的版本号**************/
                        PackageManager packageManager = getPackageManager();
                        // getPackageName()是你当前类的包名,0代表是获取版本信息
                        PackageInfo packInfo = null;
                        try {
                            packInfo = packageManager.getPackageInfo(getPackageName(),0);
                        } catch (PackageManager.NameNotFoundException e) {
                            e.printStackTrace();
                        }
                        String oldVersion = packInfo.versionName;
                        Log.d("Version",oldVersion);
                        /*************当前软件的版本号**************/
                        if(Double.parseDouble(oldVersion) < Double.parseDouble(newVersion))
                        {
                            mHandler.sendEmptyMessage(HAS_NEWER_SOFTWARE);//有新版本的软件可以更新
                        }
                        else
                        {
                            mHandler.sendEmptyMessage(BE_NEWER_SOFTWARE);//当前版本已经是最新版本
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                    Log.d("Setting","软件更新失败");
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.d("setting","网络异常,软件更新失败");
            }
        });
        mQueue.add(jsonObjectRequest);
    }


mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what)
                {
                    case DOWN_OVER:
                        downloadDialog.dismiss();
                        installApk(newFileName);
                        Log.e("updateSoftware","更新完成");
                        break;
                    case DOWN_UPDATE:
                        Log.e("progress",String.valueOf(progress));//更新进度
                        mProgress.setProgress(progress);
                        break;
                    case HAS_NEWER_SOFTWARE:
                        showNoticeDialog();//提示有软件更新
                        break;
                    case BE_NEWER_SOFTWARE:
                        Toast.makeText(SettingActivity.this,"您当前软件版本已经是最新版本",Toast.LENGTH_LONG).show();
                        break;
                    default:
                        break;
                }

            }
        };


    //提示有软件更新
    private void showNoticeDialog(){
        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle("软件版本更新");
        builder.setMessage(updateMsg);
        builder.setPositiveButton("下载", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                showDownloadDialog();
            }
        });
        builder.setNegativeButton("以后再说", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        noticeDialog = builder.create();
        noticeDialog.show();
    }

 //软件更新对话框
    private void showDownloadDialog(){
        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle("软件版本更新");

        final LayoutInflater inflater = LayoutInflater.from(this);
        View v = inflater.inflate(R.layout.progress, null);
        mProgress = (ProgressBar)v.findViewById(R.id.progress);

        builder.setView(v);
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                interceptFlag = true;
            }
        });
        downloadDialog = builder.create();
        downloadDialog.show();

        prepareUpdate();
    }



//准备更新,从服务器下载apk文件
    private  void prepareUpdate(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                String updateUrl = null;
                try {
                    updateUrl = mJsonObject.getJSONObject("data").getString("updateSoftwareUrl");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                String dirName = "";
                dirName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/MyDownload/";
                File file = new File(dirName);
                if(!file.exists())
                {
                    file.mkdir();
                }
                newFileName = updateUrl.substring(updateUrl.lastIndexOf("/")+1);
                newFileName = dirName + newFileName;
                File newFile = new File(newFileName);
                if(newFile.exists())
                {
                    newFile.delete();//如果存在删除
                }
                URL urlUpdate = null;
                try {
                    urlUpdate = new URL(updateUrl);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
                URLConnection con = null;
                try {
                    con = urlUpdate.openConnection();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //获得文件长度
                 int contentLength = con.getContentLength();
                // 输入流
                InputStream is = null;
                try {
                    is = con.getInputStream();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                // 1K的数据缓冲
                byte[] bs = new byte[1024];
                // 读取到的数据长度
                int len;
                // 输出的文件流
                OutputStream os = null;
                try {
                    os = new FileOutputStream(newFileName);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                // 开始读取
                int count = 0;

                try {
                    while ((len = is.read(bs)) != -1 && !interceptFlag) {
                        os.write(bs, 0, len);
                        count += len;
                        progress =(int)(((float)count / contentLength) * 100);
                        mHandler.sendEmptyMessage(DOWN_UPDATE);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if(!interceptFlag)
                {
                    mHandler.sendEmptyMessage(DOWN_OVER);//下载完成
                }
                else{
                    Log.d("UpdateSoftware", "=====================更新取消=====================");
                }
                // 完毕,关闭所有链接
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
        }).start();

    }

//apk文件下载完以后提示用户安装
 //软件安装
    public void installApk(String apk)
    {
        File apkFile = new File(apk);
        if(!apkFile.exists())
        {
            return;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse("file://"+apkFile.toString()),"application/vnd.android.package-archive");
        startActivity(intent);
    }

/进度条 progress.xml/

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        />
</LinearLayout>

Android中实现软件检测更新和自动安装

思想:(其实,我认为第一步就是开广告!用户看广告的过程正好检测更新) 1.在启动软件的第一刻,也就是没加载窗体之前就执行该操作。 2.检测版本要读取到应用本身的版本号 3.拿到版本号后,要对比服务器上...
  • u013519020
  • u013519020
  • 2016年08月18日 20:39
  • 1185

android应用版本更新策略

开发中对版本进行检查并更新的需求基本是所有应用必须有的功能,可是在实际开发中有些朋友就容易忽略一些细节。版本更新的基本流程:一般是将本地版本告诉服务器,服务器经过相关处理会返回客户端相关信息,告诉客户...
  • guizhigang168
  • guizhigang168
  • 2016年06月28日 08:28
  • 1530

Android如何更新app的版本

package com.runye.express.service; import java.io.FileOutputStream; import java.io.InputStream; ...
  • qq_23243417
  • qq_23243417
  • 2015年05月11日 15:18
  • 638

Android检查更新(是否强制更新)

public class UpdateManager { private Context mContext; //上下文 private String apkUrl = "http://...
  • tangletao
  • tangletao
  • 2015年04月30日 15:07
  • 9967

Android应用的自动升级、更新模块的实现

我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新。得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下。首先给出界面效果: ...
  • dddxxxx
  • dddxxxx
  • 2017年03月01日 15:38
  • 1469

Android应用更新-自动检测版本及自动升级

步骤: 1.检测当前版本的信息AndroidManifest.xml–>manifest–>[Android] 2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹...
  • Imshuyuan
  • Imshuyuan
  • 2017年03月17日 13:33
  • 8228

Android 版本更新工具 兼容7.0

package com.xinchuang.buynow.utility; import android.app.Activity; import android.app.AlertDialog; ...
  • suwenlai
  • suwenlai
  • 2017年06月02日 16:10
  • 644

浅谈android应用的版本更新

我们都知道一个软件不可能一个版本就能做到特别完美,都需要经过不断的修改和优化才能成为一个稳定的版本。我们需要不停的对软件进行 功能添加 ,bug修复以及性能上 的一些优化。所以今天就和大家说一下and...
  • shaoyezhangliwei
  • shaoyezhangliwei
  • 2015年07月15日 11:21
  • 1850

android自动更新实现方案

原文链接:http://bbs.umeng.com/thread-15012-1-1.html 系统结构 友盟自动更新系统的示意图如下: 图中手机代表客户端。服务端的各个模块描述如下: ...
  • u014702999
  • u014702999
  • 2016年08月18日 11:28
  • 1068

Android 应用自动检测更新代码

由于Android项目开源所致,市面上出现了N多安卓软件市场。为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量。因此我们有必...
  • ljt2724960661
  • ljt2724960661
  • 2016年09月01日 09:22
  • 777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android软件更新
举报原因:
原因补充:

(最多只允许输入30个字)