Android在线更新 远程安装程序
原文:http://blog.csdn.net/jasper_success/article/details/7984065
第一步:使用java.net的URLConnection对象来创建连接
第二步:通过InputStream将下载的文件写入存储卡内缓存
第三步:下载完毕之后,通过自定义的openFile()方法打开文件,判断文件类型,若为APK,开始安装
第四步:准备离开Installer程序的同时,通过自制的delFile()方法,删除缓存内文件
- /**
- * 远程下载安装Android程序
- *
- * @ClassName InstallOnlineActivity
- * @author Jet
- * @date 2012-9-14
- */
- public class InstallOnlineActivity extends Activity {
- private TextView mTextView;
- private EditText mEditText;
- private Button mButton;
- private String currentFilePath = "";
- private String currentTempFilePath = "";
- private String strURL = "";
- private String fileEx = "";
- private String fileName = "";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.installonline);
- mTextView = (TextView) findViewById(R.id.installonline_text1);
- mEditText = (EditText) findViewById(R.id.installonline_edittext1);
- mButton = (Button) findViewById(R.id.installonline_button1);
- mButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // 将文件下载到本地
- mTextView.setText("下载中...");
- strURL = mEditText.getText().toString();
- // 截取文件后缀
- fileEx = strURL.substring(strURL.lastIndexOf('.') + 1,
- strURL.length()).toLowerCase();
- // 截取文件名
- fileName = strURL.substring(strURL.lastIndexOf('/') + 1,
- strURL.lastIndexOf('.'));
- getFile(strURL);
- }
- });
- }
- private void getFile(final String strPath) {
- if (currentFilePath.equals(strPath)) {
- getDataSource(strPath);
- }
- currentFilePath = strPath;
- Runnable r = new Runnable() {
- @Override
- public void run() {
- getDataSource(strPath);
- }
- };
- new Thread(r).start();
- }
- private void getDataSource(String url) {
- if (!URLUtil.isNetworkUrl(url)) {
- mTextView.setText("请填写正确的URL");
- } else {
- try {
- URL myUrl = new URL(url);
- // 取得连接
- URLConnection conn = myUrl.openConnection();
- // 连接
- conn.connect();
- // 获得输入流
- InputStream is = conn.getInputStream();
- if (is == null) {
- throw new RuntimeException("stream is null");
- }
- // 创建临时文件
- File myTempFile = File.createTempFile(fileName, "." + fileEx);
- // 取得临时文件存放路径
- currentTempFilePath = myTempFile.getAbsolutePath();
- FileOutputStream fos = new FileOutputStream(myTempFile);
- byte[] buf = new byte[128];
- do {
- // 返回现在所读缓冲区的大小
- int numread = is.read(buf);
- if (numread <= 0) {
- break;
- }
- fos.write(buf, 0, numread);
- } while (true);
- // 打开文件进行安装
- openFile(myTempFile);
- is.close();
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- private void openFile(File file) {
- Intent intent = new Intent();
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setAction(android.content.Intent.ACTION_VIEW);
- String type = getMimeType(file);
- intent.setDataAndType(Uri.fromFile(file), type);
- startActivity(intent);
- }
- private String getMimeType(File file) {
- String type = "";
- String fname = file.getName();
- // 获得扩展名
- String end = fname
- .substring(fname.lastIndexOf('.') + 1, fname.length())
- .toLowerCase();
- // 按扩展名的类型决定MimeType
- if ("m4a".equals(end) || "mp3".equals(end) || "mid".equals(end)
- || "xmf".equals(end) || "ogg".equals(end) || "wav".equals(end)) {
- type = "audio";
- } else if ("3gp".equals(end) || "mp4".equals(end)) {
- type = "video";
- } else if ("jpg".equals(end) || "gif".equals(end) || "png".equals(end)
- || "jpeg".equals(end) || "bmp".equals(end)) {
- type = "image";
- } else if ("apk".equals(end)) {
- type = "application/vnd.android.package-archive";
- } else {
- type = "*";
- }
- if ("apk".equals(end)) {
- } else {
- type += "/*";
- }
- return type;
- }
- private void delFile(String fileName){
- File file = new File(fileName);
- if(file.exists()){
- file.delete();
- }
- }
- @Override
- protected void onPause() {
- mTextView = (TextView) findViewById(R.id.installonline_text1);
- mTextView.setText("下载成功");
- super.onPause();
- }
- @Override
- protected void onResume() {
- //删除临时文件
- delFile(currentTempFilePath);
- super.onResume();
- }
- }
Android在线更新 远程安装程序的更多相关文章
- 在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序 本贴首发于: http://xuekaiyuan.com/forum.php?mod=vie ...
- html5页面打包成App - Android或Iphone安装程序
下载安装前端开发工具:HBuilder 官网下载:http://www.dcloud.io/ 根据官网说明安装 * 打开登录HBuilder,把做好的H5页面通过添加app项目把H5的文件夹加入进来( ...
- Android监听应用程序安装和卸载
Android监听应用程序安装和卸载 第一. 新建监听类:BootReceiver继承BroadcastReceiver package com.rongfzh.yc; import android. ...
- PowerShell远程安装应用程序
安装MSI包 使用PowerShell调用WMI对象,你可以执行下面的脚本来安装你的MSI安装包: $box="deviis01" #this is the name of you ...
- 您的手机上未安装应用程序 android 点击快捷方式提示未安装程序的解决
最近APP出现一个很奇怪的问题,在Android 4.4.2和android 4.4.3系统上点击应用的快捷方式,打不开应用,而且会提示未安装程序. 确认了应用的MainActivity中设置了and ...
- Android 使用 adb命令 远程安装apk
Android 使用 adb命令 远程安装apk ./adb devices 列出所有设备 ./adb connect 192.168.1.89 连接到该设备 ./adb logcat 启动logca ...
- 解决"Windows 安装程序不允许从远程桌面连接安装"
msiexec /i c:\路径\安装程序 例如 msiexec /i c:\TortoiseSVN-1.7.2.22327-x64-svn-1.7.2.msi
- sencha touch 扩展篇之将sencha touch打包成安装程序(下)- 使用phonegap打包安装程序
这讲我们来讲解下如何使用phonegapa创建项目环境并通过她们将sencha touch打包成app,这里我们只讲解打包android的apk,打包ios的过程有点类似,但是需要在mac环境 ...
- Android 开发环境安装配置手册
本文指导,如何一步步搭建Android开发平台. 1 下载软件 n JDK 1.5+ 到 http://java.sun.com/javase/downloads/index.jsp 下载 n ...
随机推荐
- javacript序列化表单数据
在前端开发时,用到表单交互的比较多,在我们实现一些异步操作数据时,表单数据的序列化就显得尤为重要了.下面我们一起来看看如何进行序列化. 如,我们在进行提交表单时,地址栏里会显示这样的东东:name=z ...
- [POJ 2588] Snakes
同swustoj 8 Snakes Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1015 Accepted: 341 ...
- ShareSDK 实现新浪微博分享(微信,QQ,新浪微博类似)
1 . 分享(前提是集成了sdk,配置好了Key),只要实现点击事件,调用shareSina(); ShareSDK.initSDK(this); private void shareSina() { ...
- [.NET WebAPI系列02] WebAPI 中的HTTP通信
[前言] 本节用于承上启下,通过第一节了解的WebAPI的基本语法,Controller CRUD方法的基本格式: 但很多场合,第一节中的Web API Controller方法返回的信息 过于简单, ...
- JVM的参数设置与OutOfMemoryError异常关系
Java堆中存放Object对象数据,例如new出来的Object.当没有任何引用指向某对象时,该对象可能被垃圾回收.有关垃圾回收算法,可参考其他有关文章,网上很多.关于对象引用,按强弱还有强引用,软 ...
- mysqldump使用
mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...
- 【转】提示框第三方库之MBProgressHUD iOS toast效果 动态提示框效果
原文网址:http://www.zhimengzhe.com/IOSkaifa/37910.html MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单.方便,并且可以对显 ...
- (转载)【C++】new A和new A()的区别详解
(转载)http://blog.csdn.net/xiajun07061225/article/details/8796257 我们在C++程序中经常看到两种new的使用方式:new A以及new A ...
- Android ViewTreeObserver简介
Android ViewTreeObserver简介 一.结构 public final class ViewTreeObserver extends Object java.lang.Objec ...
- 【C/C++运行时库】 /MT /MTd /MD /MDd对C/C++运行库的影响
欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3146937.html 测试VS中[项目属性]-[C/C++]-[代码生成]选项中的[运行库]- [ /MT, ...