版本更新


<span style="background-color: rgb(255, 0, 0);">
///MainActivity中</span>
package test.bwie.com.gaoxuge20160701;

import android.app.AlertDialog;
import android.app.DownloadManager;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import test.bwie.com.gaoxuge20160701.adapter.MyAdapter;
import test.bwie.com.gaoxuge20160701.bean.NewsBean;
import test.bwie.com.gaoxuge20160701.bean.VersionBean;
import test.bwie.com.gaoxuge20160701.utils.NetWorkUtils;
import test.bwie.com.gaoxuge20160701.utils.PullUtils;
import test.bwie.com.gaoxuge20160701.utils.VerSionUtils;

public class MainActivity extends AppCompatActivity {

    private Button newcode;
    private ListView lv;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
//            Toast.makeText(MainActivity.this, "====="+list.toString(), Toast.LENGTH_SHORT).show();
            switch (msg.what) {
                case 0:
                    //给listview设置适配器
                    MyAdapter adapter = new MyAdapter(MainActivity.this, list);
                    lv.setAdapter(adapter);
                    break;
                case 1:
                    try {
                        //判断版本号并弹出是否更新的提示框
                        updataInfo = VerSionUtils.getUpdataInfo(inputstreams);
                        int verCode = VerSionUtils.getVerCode(MainActivity.this);
                        //打印当前的版本号
                        System.out.println("当前版本号====="+verCode);
                        if (verCode < Integer.parseInt(updataInfo.getVersionCode())) {
                            //弹出是否更新的提示框
                            showUpdataDialog();
                        } else {
                            Toast.makeText(MainActivity.this, "已经是最新版本,无须更新", Toast.LENGTH_SHORT).show();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
            }

        }
    };
    private String path = "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex=0&pageSize=20";
    private PullUtils utils = new PullUtils();
    private List<NewsBean> list;
    private InputStream inputstreams;
    private VersionBean updataInfo;
    private DownloadManager downloadManager;
    private ProgressDialog pd;    //进度条对话框

    private Handler m_mainHandler =new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建ProgressDialog对象
        pd = new  ProgressDialog(this);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMessage("正在下载更新");
        //找控件
        initView();
        //请求数据
        initData();
        //控件的点击事件
        setlistener();
    }

    private void setlistener() {
        //版本更新的点击事件
        newcode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updatasapk();
            }
        });


    }

    //从网络请求数据返回流 并给handler发送消息,进行解析判断
    private void updatasapk() {
        new Thread() {
            @Override
            public void run() {
                super.run();
                inputstreams = NetWorkUtils.getInputstreams("http://www.oschina.net/MobileAppVersion.xml");
                handler.sendEmptyMessage(1);
            }
        }.start();
    }


    /**
     * 从网络请求数据
     */
    private void initData() {
        new Thread() {
            @Override
            public void run() {
                super.run();
                String string = NetWorkUtils.getString(path);
//                System.out.println("======"+string);
                //解析xml
                list = utils.getlist(string);
                //给handler发送消息进行适配器的设置
                handler.sendEmptyMessage(0);


            }
        }.start();
    }

    /**
     * 找控件
     */
    private void initView() {
        newcode = (Button) findViewById(R.id.newcode);
        lv = (ListView) findViewById(R.id.lv);
    }

    /*
 *
 * 弹出对话框通知用户更新程序
 *
 * 弹出对话框的步骤:
 *  1.创建alertDialog的builder.
 *  2.要给builder设置属性, 对话框的内容,样式,按钮
 *  3.通过builder 创建一个对话框
 *  4.对话框show()出来
 */
    protected void showUpdataDialog() {
        AlertDialog.Builder builer = new AlertDialog.Builder(this);
        builer.setTitle("版本升级");
        builer.setMessage(updataInfo.getUpdateLog());
        //当点确定按钮时从服务器上下载 新的apk 然后安装
        builer.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Log.i("sss", "下载apk,更新");
//                downLoadApk();
                downFile(updataInfo.getDownloadUrl());
            }
        });
        //当点取消按钮时进行登录
        builer.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        AlertDialog dialog = builer.create();
        dialog.show();
    }

    private void downFile(final String url)
    {
        //提示框显示
       pd.show();
        //开启子线程下载apk
        new Thread() {
            public void run() {
                //创建HttpClient
                HttpClient client = new DefaultHttpClient();
                //请求方式
                HttpGet get = new HttpGet(url);
                HttpResponse response;
                try {
                    //请求网络
                    response = client.execute(get);
                    HttpEntity entity = response.getEntity();
                    long length = entity.getContentLength();

                    //设置进度条的最大值
                    pd.setMax((int)length);
                    //获取流
                    InputStream is = entity.getContent();
                    FileOutputStream fileOutputStream = null;
                    //将流写到sd卡中
                    if (is != null) {
                        File file = new File(
                                Environment.getExternalStorageDirectory(),
                                "updata.spk");
                        fileOutputStream = new FileOutputStream(file);
                        byte[] buf = new byte[1024];
                        int ch = -1;
                        int count = 0;
                        //循环将请求的数据写到sd卡
                        while ((ch = is.read(buf)) != -1) {
                            fileOutputStream.write(buf, 0, ch);
                            count += ch;
                            if (length > 0) {
                                pd.setProgress(count);//设置当前进度
                            }
                        }
                    }
                    fileOutputStream.flush();
                    if (fileOutputStream != null) {
                        fileOutputStream.close();
                    }
                    //告诉HANDER已经下载完成了,可以安装了
                    down();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
    //提示框消失,进行安装
    private void down() {
        m_mainHandler.post(new Runnable() {
            public void run() {
                pd.cancel();
                update();
            }
        });
    }
    /**
     * 安装程序
     */
    void update() {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(Environment
                        .getExternalStorageDirectory(),"updata.spk")),"application/vnd.android.package-archive");
        startActivity(intent);
    }



}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值