android 软件apk自动更新实现注意点!!
1,解析xml时的NetWorkOnMainThread问题
代码:这里要注意的点就是在访问服务器网络时,不能将InputStream直接返回,因为若直接返回给主线程操作,很可能子线程的InputStream还在获取字节流,这时候就会导致这个UI线程访问网络异常,所以不能直接返回这个InputStream,直接在子线程里
操作这个输入流,然后将操作的结果返回。
private class AsyncTask_ConnVersion extends AsyncTask<String, Void, ConnData> { @Override protected ConnData doInBackground(String... params) { URL serviceAddrUrl; HttpURLConnection conn; String urlStr=params[0]; try { serviceAddrUrl = new URL(urlStr); conn = (HttpURLConnection) serviceAddrUrl.openConnection(); conn.connect(); int len=conn.getContentLength(); InputStream in=conn.getInputStream(); HashMap<String, String> hashMap=new ParseXmlService().parseXml(in); connDataInfo=new ConnData(hashMap, len); //关闭连接 conn.disconnect(); return connDataInfo; } catch (Exception e) { e.printStackTrace(); } return null; } }
2,FileNotFound
apk在服务器上找不到,路径都对就是文件无法访问到,这个问题我是看别人解决的:URL请求的具体实现,网上各种各样,没有什么好纠结的了。URL路径完全没有问题,替换成同目录下的其他类型文件,可以找到文件,唯独找不到文件。
找了几个小时,悄然发现,原来和IIS的设置有关系,我这边使用的测试服务器为IIS,IIS默认限制了apk类型文件的下载,所以输入流拿不到文件数据,提示“找不到文件”。
最终解决办法:
1、在管理工具里打开Internet 信息服务(IIS)管理器。然后选择需要配置的网站。
2、右侧的界面中会显示该网站的所有功能配置,我们选择并点击进入“MIME类型”。
3、在右侧的操作区选择点击“添加”MIME。
4、在弹出的添加窗口里的文件扩展名输入:APK
在MIME类型输入:application/vnd.android.package-archive
按确定。
3,版本更新时已经下载好后的apk无法安装,安装不上,代码没有问题,后来发现必须以发布的方式运行原始的apk,然后更新下下来最新的apk进行安装。即要导出当前测试的apk而不能直接在eclipse上测试更新安装这个。