首页 > 代码库 > Android下载更新代码

Android下载更新代码

其实是昨天反编译一个apk,给它添加一个自动更新的功能用到的。为了在smali下方便查看,代码写的不规范,反正到了smali都一个吊样~~~~

权限:    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>    <uses-permission android:name="android.permission.INTERNET"/>

 

    //Start===========    public void updata(){        new Thread(){            @Override            public void run() {                request(apiUrl);            }        }.start();    }    String newapkName = "updata.apk";    String apiUrl = "http://192.168.1.101:8080/udate.txt";    //请求接口    public void request(String Httpurl){        URL url = null;        try {            url = new URL(Httpurl);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            InputStream is = conn.getInputStream();            String s = toString(is);            JSONObject jsonObject = new JSONObject(s);            Double versionCode = jsonObject.getDouble("versionCode"); //远程版本            String versionName = getVersionName();            double v = Double.parseDouble(versionName);            if(versionCode > v){                //更新下载                downLoadFile(jsonObject.getString("updateurl"));            }        } catch (Exception e) {            e.printStackTrace();        }    }    Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            switch (msg.what){                case 1:                    ShowUpdataDilg();                    break;            }        }    };    //版本提示对话框    public void ShowUpdataDilg() {        new AlertDialog.Builder(MainActivity.this)                .setTitle("提示")                .setMessage("是否安装最新版本? ")                .setPositiveButton("确定", new DialogInterface.OnClickListener() {                    public void onClick(DialogInterface dialog, int which) {                        Uodate();                    }                })                .setNegativeButton("取消", new DialogInterface.OnClickListener() {                    public void onClick(DialogInterface dialog, int which) {                    }                })                .show();    }    //获取版本    private String getVersionName() throws Exception    {        PackageManager packageManager = getPackageManager();        // getPackageName()是你当前类的包名,0代表是获取版本信息        PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(),0);        String version = packInfo.versionName;        return version;    }    //安装apk    public void Uodate(){//        String str = "/" + newapkName;//        String fileName = Environment.getExternalStorageDirectory() + str;//        Intent intent = new Intent(Intent.ACTION_VIEW);//        intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");//        startActivity(intent);        String str = "/sdcard/update/" + newapkName;        Intent intent = new Intent(Intent.ACTION_VIEW);        intent.setDataAndType(Uri.fromFile(new File(str)),                "application/vnd.android.package-archive");        startActivity(intent);    }//对话框确定    public void isUpdate(){        String str = "/" + newapkName;        String fileNames = Environment.getExternalStorageDirectory() + str;        Intent intent = new Intent(Intent.ACTION_VIEW);        intent.setDataAndType(Uri.fromFile(new File(fileNames)), "application/vnd.android.package-archive");        startActivity(intent);    }    protected File downLoadFile(String httpUrl) {        File tmpFile = new File("/sdcard/update");        if (!tmpFile.exists()) {            tmpFile.mkdir();        }        final File file = new File("/sdcard/update/" + newapkName);        try {            URL url = new URL(httpUrl);            try {                HttpURLConnection conn = (HttpURLConnection) url.openConnection();                InputStream is = conn.getInputStream();                FileOutputStream fos = new FileOutputStream(file);                byte[] buf = new byte[256];                conn.connect();                double count = 0;                if (conn.getResponseCode() >= 400) {                    Toast.makeText(MainActivity.this, "连接超时", Toast.LENGTH_SHORT).show();                } else {                    while (count <= 100) {                        if (is != null) {                            int numRead = is.read(buf);                            if (numRead <= 0) {                                break;                            } else {                                fos.write(buf, 0, numRead);                            }                        } else {                            break;                        }                    }                }                fos.close();                is.close();                conn.disconnect();                //下载成功                handler.sendEmptyMessage(1);            } catch (IOException e) {                e.printStackTrace();            }        } catch (MalformedURLException e) {            e.printStackTrace();        }        return file;    }    //输入流转换为String    public String toString(InputStream is) {        String result = null;        try {            //构造一个输出流(字节队列输出流)            ByteArrayOutputStream baos = new ByteArrayOutputStream();            //一个byte数组,用来存储得到的字节数据            byte[] bys = new byte[1024];            int len = 0;            //循环读出完整字节数据            while((len = is.read(bys)) != -1) {                baos.write(bys,0,len);            }            //byte数据转换为字符串            result = new String(baos.toByteArray());            is.close();            baos.close();        } catch (IOException e) {            e.printStackTrace();        }        return result;    }    //End===========

 

Android下载更新代码