博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 从服务器上获取APK下载安装
阅读量:5927 次
发布时间:2019-06-19

本文共 5310 字,大约阅读时间需要 17 分钟。

 

简单的为新手做个分享。 

网上有些资料,不过都是很零散,或是很乱的,有的人说看不懂。 一直有新手说 做到服务器更新APK时没有思路,这里做个简单的分享,希望有不同思路的可以讨论。 

下面做个很简单的读取处理和讲解思路。 代码带有注释:

 
try {              URL url = new URL(params[0]);              HttpURLConnection connection = (HttpURLConnection) url                      .openConnection();              connection.setConnectTimeout(10 * 1000); //超时时间             connection.connect();  //连接            if (connection.getResponseCode() == 200) { //返回的响应码200,是成功.                 File file = new File("/mnt/sdcard/yang/dujinyang.apk");   //这里我是手写了。建议大家用自带的类                file.createNewFile();                  InputStream inputStream = connection.getInputStream();                  ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); //缓存                 byte[] buffer = new byte[1024 * 10];                  while (true) {                     int len = inputStream.read(buffer);                     publishProgress(len);                      if (len == -1) {                          break;  //读取完                    }                     arrayOutputStream.write(buffer, 0, len);  //写入                }                  arrayOutputStream.close();                  inputStream.close();                   byte[] data = arrayOutputStream.toByteArray();                  FileOutputStream fileOutputStream = new FileOutputStream(file);                  fileOutputStream.write(data); //记得关闭输入流                 fileOutputStream.close();              }            } catch (MalformedURLException e) {  .            e.printStackTrace();         } catch (IOException e) {              e.printStackTrace();          }

 

 

 以上是读取APK文件并保存在了本地,InputStream转为FileOutputStream保存HttpURLConnection获取到的数据 。

 那么只要再找到你的那个保存的路径就能实现安装了。
  
 

下面是安装和卸载的代码: 首先说下卸载:

Uri packageURI = Uri.parse("package:com.demo.DUJINYANG"); 

Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); 

startActivity(uninstallIntent);

Environment拥有一些可以获取环境变量的方法 package:com.demo.DUJINYANG 这个形式是 package:程序完整的路径 (包名+程序名). 

然后是 --安装: 

String str = "/Dujinyang.apk"; //APK的名字

 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);

 
 
主要代码如下://打开APK程序代码private void openFiles(File file) {                // TODO Auto-generated method stub                Intent intent = new Intent();                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                intent.setAction(android.content.Intent.ACTION_VIEW);                intent.setDataAndType(Uri.fromFile(file),                                "application/vnd.android.package-archive");                startActivity(intent);        }
 
当然拉 ,这里不仅一种方法:以下方法也是可行的--
//下载apk程序代码protected File downLoadFile(String httpUrl) {                final String fileName = "dujinyang.apk";                File tmpFile = new File("/sdcard/update");                if (!tmpFile.exists()) {                        tmpFile.mkdir();//创建文件夹                }                final File file = new File("/sdcard/update/" + fileName);                try {                        URL url = new URL(httpUrl);                        try {                                HttpURLConnection conn = (HttpURLConnection) url                                                .openConnection();                                InputStream is = conn.getInputStream();                                FileOutputStream fileOutput= new FileOutputStream(file);                                byte[] buf = new byte[256];//分配byte                                conn.connect();                                double count = 0;                                if (conn.getResponseCode() >= 400) {                                        Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)                                                        .show();                                } else {                                        while (count <= 100) {                                                if (is != null) {                                                        int numRead = is.read(buf);                                                        if (numRead <= 0) {                                                                break;                                                        } else {                                                                fileOutput.write(buf, 0, numRead);                                                        }                                                } else {                                                        break;                                                }                                        }                                }                                conn.disconnect();//需要记得关闭连接                                fileOutput.close();                                is.close();                        } catch (IOException e) {                                e.printStackTrace();                        }                } catch (MalformedURLException e) { 	                      e.printStackTrace();                }                return file;        }

 

 

到这里 思路简单的理清 完了。

 
 此时可以根据你自身的项目去整改。如果新手还有不懂的可以私聊。
 
 --分享 希望大家有好的代码可以分享,共同讨论

转载于:https://www.cnblogs.com/wuwa/p/6191635.html

你可能感兴趣的文章
2013年4月工作小结 -- 穿越前的回眸
查看>>
在Hyper-V下安装Windows 8
查看>>
Sysbench OLTP 性能测试: MySQL-5.6 vs. MariaDB-10.0
查看>>
简明Linux命令行笔记:gzip
查看>>
SQL Server误区30日谈-Day20-破坏日志备份链之后,需要一个完整备份来重新开始日志链...
查看>>
对于拷贝构造函数和赋值构造函数的理解
查看>>
TortoiseSVN 统计功能
查看>>
SQLite语法
查看>>
HTML5 VIDEO标签播放事件流水
查看>>
【深入理解计算机系统】_2_计算机系统中的信息表示
查看>>
虚拟机中的Ubuntu12.04网络配置
查看>>
Subversion backup and restore
查看>>
[CSS]为什么不推荐在CSS中使用ID选择器
查看>>
对于json数据的应用01
查看>>
javascript性能优化 之 DOM交互
查看>>
Implementing Sort Algorithm in Delphi
查看>>
JVM源码分析
查看>>
维度字段缓慢渐变维度的处理方式
查看>>
[原][问题解决]常见问题的5种解决办法(由Jenkins问题解决谈起)
查看>>
List
查看>>