android 从服务器上获取APK下载安装


简单的为新手做个分享。 

网上有些资料,不过都是很零散,或是很乱的,有的人说看不懂。 一直有新手说 做到服务器更新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;
        }

 

 

到这里 思路简单的理清 完了。
 
 此时可以根据你自身的项目去整改。如果新手还有不懂的可以私聊。
 
 --分享 希望大家有好的代码可以分享,共同讨论

时间: 2024-11-08 22:39:03

android 从服务器上获取APK下载安装的相关文章

在android上的XML文件,怎么样从远程服务器上获取

问题描述 在android上的XML文件,怎么样从远程服务器上获取 需要在远程服务器上读取XML文件,然后再修改本地android上的数据.我用XmlPullParser读取数据. XmlPullParser users; try { URL xmlUrl = new URL(""http://xx.xx.xx.xx/1.xml""); users = XmlPullParserFactory.newInstance().newPullParser(); users

搜索-android用户从服务器上查询并下载多张图片的思路或实现,应该使用哪种连接方式呢

问题描述 android用户从服务器上查询并下载多张图片的思路或实现,应该使用哪种连接方式呢 android想实现一个用户从服务器上先查询,如图片名,然后自动下载多张相关图片的实现.应该使用哪种网络连接方式进行查询下载呢? 查询框期望是使用EditText,点击查询按钮进行查询.并且在输入时可以有下拉提示,如我输入"A",下拉列表中自动弹出并提示以往记录或者"aaAB....."等信息. 解决方案 图像特征数据推荐存储到数据库里面然后,根据用户在 edittext

Android通过aapt命令获取apk详细信息(包括:文件包名,版本号,SDK等信息)

公司运维问我怎么在windows上安装模拟器,我你说你安装模拟器干什么?他说,我安装模拟器查看app的包名这些信息做统计. 我顿时想,有必要这样折腾么? 我然后就给他装了Android SDK通过build-tools下面的aapt.exe文件执行命令即可得到所有apk信息. aapt命令 aapt l[ist] [-v] [-a] file.{zip,jar,apk} List contents of Zip-compatible archive. aapt d[ump] [--values]

Java从服务器上获取时间动态显示在jsp页面实现思路

Java只能获取一次,到页面的时间是静态的,不过通过js和Java的合作,巧妙地实现此功能   Java获取服务器时间,动态显示到jsp页面,大家都是到Java只能获取一次,到页面的时间是静态的,不过通过js和Java的合作,巧妙地实现此功能. 本 人是给电视做系统,客户要求页面能显示时间,因为电视浏览器获取的时间不对,没办法只能从服务器获取时间,但是问题来了,服务器的时间获取一次就成静态的 了,客户不满意,但也没办法,只能这样.不过这个问题在我这老惦记着,今天看到有个例子,说把Java获取服务

本地预览-服务器上到项目下载到本地后,如何预览

问题描述 服务器上到项目下载到本地后,如何预览 预览错误如下 解决方案 php服务器有没有装好,如果是iis,先在添加删除windows功能中启用php 解决方案二: 这个问题后来自己在打开phpstudy的时候发现是80端口被占用了,导致我进不去自己的站点,解除占用后就好了, 解决方案三: 1.先确认你的服务器上文件是否存在.在IIS中,选中你的WEBService,右键,浏览.文件夹中是否可以正确查看路径文件. 2.如果文件存在,选中你的WEBService,右键,管理应用程序,浏览.网页访

聊天列表是本地保存的还是从服务器上获取的?

问题描述 本帖最后由 独孤求败 于 2015-2-27 14:55 编辑 聊天列表是本地保存的还是从服务器上获取的? 解决方案 聊天列表都是保存在本地了,是sdk自动保存的.服务器上也有存聊天记录,但是客户端不能取服务器上得聊天记录.聊天激励在沙盒里,位置在/library/easemobDB 里面.

Java从服务器上获取时间动态显示在jsp页面实现思路_JSP编程

Java获取服务器时间,动态显示到jsp页面,大家都是到Java只能获取一次,到页面的时间是静态的,不过通过js和Java的合作,巧妙地实现此功能. 本人是给电视做系统,客户要求页面能显示时间,因为电视浏览器获取的时间不对,没办法只能从服务器获取时间,但是问题来了,服务器的时间获取一次就成静态的了,客户不满意,但也没办法,只能这样.不过这个问题在我这老惦记着,今天看到有个例子,说把Java获取服务器的时间转化成毫秒,然后用js每一秒刷新一次就可以动态显示,所以就有了下面的 复制代码 代码如下:

VS2005怎样改变从源代码服务器上获取下来的文件的存放位置?

问题描述 VS2005怎样改变从源代码服务器上获取下来的文件的存放位置?重装系统后,从服务器上重新获取,代码文件存放的位置不是我原来在本地的存放位置我把我获取到的全删了重新获取可是已经没有了存放位置的选择,自动又存放到了刚才的位置请问该怎样解决?谢谢!源代码管理我用的是TeamExplorer 解决方案 解决方案二:在线等结贴解决方案三:vs没有,你的代码管理器有的,解决方案四:找了找不到不知道在哪里?解决方案五:获取单个文件可以指定位置吧?获取的时候,先只获取解决方案文件.然后在vs2005中

百度云Android版避免上传和下载文件消耗流量方法

给各位百度云软件的用户们来详细的解析分享一下百度云Android版避免上传和下载文件消耗流量的方法. 方法分享: 百度云Android版上传下载会消耗流量,因此请尽量选择在Wi-Fi环境下进行操作.您也可以在设置界面中选择"仅在Wi-Fi下上传下载"选项,当您的网络环境在非Wi-Fi环境下,不会对传输列表中的文件进行传输,请您放心.   好了,以上的信息就是小编给各位百度云的这一款软件的用户们带来的详细的百度云Android版避免上传和下载文件消耗流量的方法解析分享的全部内容了,各位看