首先说一下运行环境,android2.3测试(主线程http请求),tomcat7.0作为服务器

tomca配置:

在webapps下的root文件夹下放了两个文件,一个为apk版本信息txt文件(当然也可以在servlet中返回json),一个为新的apk的文件(v2.0)

//install.txt内容
1
versioncode=22 url=http://192.168.1.131/android_apk_install.apk

android配置:

首先,机子运行的是apk为v1.0版本,服务器的为v2.0版本

权限配置(网络和sd卡写入):

1 <uses-permission android:name="android.permission.INTERNET" />2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

下面几个方法为网络的几个工具方法

1.httpget请求,返回inputstream

复制代码
 1 public static InputStream getDataByHttpGet(String url) { 2         InputStream inputStream = null; 3         HttpGet httpGet = new HttpGet(url); 4         HttpClient httpClient = new DefaultHttpClient(); 5         try { 6             HttpResponse response = httpClient.execute(httpGet); 7             int code = response.getStatusLine().getStatusCode(); 8             if (code != 200) { 9                 return null;10             }11             HttpEntity entity = response.getEntity();12             inputStream = entity.getContent();13         } catch (Exception e) {14             e.printStackTrace();15         }16         return inputStream;17     }
复制代码

2.获取新apk的信息

复制代码
 1 public static Hashtable<String, String> getAPKInstallContent(String path) { 2         InputStream inputStream = getDataByHttpGet(path); 3         Hashtable<String, String> hashtable = new Hashtable<String, String>(); 4         Properties properties = new Properties(); 5         if (inputStream != null) { 6             try { 7                 properties.load(inputStream); 8                 Set<Entry<Object, Object>> set = properties.entrySet(); 9                 for (Entry<Object, Object> entry : set) {10                     hashtable.put(entry.getKey().toString(), entry.getValue()11                             .toString());12                 }13             } catch (IOException e) {14                 e.printStackTrace();15             } finally {16                 if (inputStream != null) {17                     try {18                         inputStream.close();19                     } catch (IOException e) {20                         e.printStackTrace();21                     }22                 }23             }24         }25         return hashtable;26     }
复制代码

3.下载apk

复制代码
 1 public static boolean downloadApk(String url) { 2         boolean flag = false; 3         InputStream inputStream = getDataByHttpGet(url); 4         File sd_file = Environment.getExternalStorageDirectory(); 5         File apk_file = new File(sd_file, "android_installapk.apk"); 6         OutputStream outputStream = null; 7         try { 8             outputStream = new FileOutputStream(apk_file); 9             byte data[] = new byte[1024];10             int len = 0;11             while ((len = inputStream.read(data)) != -1) {12                 outputStream.write(data, 0, len);13             }14             flag = true;15         } catch (Exception e) {16             e.printStackTrace();17         }finally{18             if (inputStream != null) {19                 try {20                     inputStream.close();21                 } catch (IOException e) {22                     e.printStackTrace();23                 }24             }25             if (outputStream != null) {26                 try {27                     outputStream.close();28                 } catch (IOException e) {29                     e.printStackTrace();30                 }31             }32         }33         return flag;34     }
复制代码

下面是Activity

复制代码
public class MainActivity extends Activity {    private String url = "http://192.168.1.131/install.txt";    private String packageName;    private PackageManager packageManager;    private PackageInfo packageInfo;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final Hashtable<String, String> hashtable = HttpUtils.getApkInfo(url);        packageName = getPackageName();        packageManager = getPackageManager();        try {            packageInfo = packageManager.getPackageInfo(packageName,                    PackageManager.GET_ACTIVITIES);            String str1 = hashtable.get("versioncode");            int str2 = packageInfo.versionCode;            System.out.println("网络:" + str1 + "||" + "本机:" + str2);            if (!String.valueOf(str2).equals(str1)) {                new Builder(MainActivity.this).setTitle("温馨提示!")                        .setMessage("您的应用有新版本,是否需要下载安装?")                        .setPositiveButton("确定", new OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog,                                    int which) {                                boolean flag = HttpUtils.downloadApk(hashtable                                        .get("url"));                                if (flag) {                                    System.out.println("现在开始安装!");                                    Uri uri = Uri                                            .fromFile(new File(                                                    "/mnt/sdcard/android_installapk.apk"));                                    Intent intent = new Intent(                                            Intent.ACTION_VIEW);                                    intent.setDataAndType(uri,                                            "application/vnd.android.package-archive");                                    startActivity(intent);                                } else {                                    System.out.println("没有进入安装,下载错误");                                }                            }                        }).setNegativeButton("取消", new OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog,                                    int which) {                            }                        }).create().show();            }        } catch (NameNotFoundException e) {            e.printStackTrace();        }    }}

更多相关文章

  1. ionic打包apk的时候Android API版本不合适出现的问题
  2. Android 版本与 Bluetooth 版本之间的关系
  3. Android获取相册中图片的路径 4.4版本前后的变化
  4. Android Studio 手动创建活动(Activity) 第一行代码 第二章
  5. Android学习笔记(六)-文件操作与SDCard读写访问
  6. Android刮刮卡效果实现代码
  7. Android实现在xml文件中引用自定义View的方法分析

随机推荐

  1. android各sdk,cpu_img,source,doc下载
  2. Android入门教程(二)之------环境搭建
  3. Android SDK 2.2 离线安装
  4. 三层缓存机制-新知识点,Android常见的内存
  5. android开发(二):android结构
  6. Android基础知识学习-Instrumentation启
  7. Android--取得MD5指纹,取得MapKey
  8. 安卓巴士总结了近百个Android优秀开源项
  9. Android(安卓)布局优化
  10. Android设计模式系列-单例模式