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 ...
随机推荐
- js控制元素的显示与隐藏
<body class="easyui-layout"> <div id = "centerId" data-options="re ...
- struts2启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
好久没有搞struts2,今天配置strut2.2.1,启动时遇到个小问题.记录下. tomcat启动报错: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- sharepoint 2010 如何给文档库或自定义列表添加评论功能
转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...
- Servlet3.0学习总结(一)——使用注解标注Servlet
一.Servlet3.0介绍 Servlet3.0是Java EE6规范的一部分,Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述 ...
- PLSQL Develop 配置
plsq 连接oracle数据库的配置步骤: 1.下载oracle客户端: 下载地址:http://www.oracle.com/technetwork/topics/winx64soft-08954 ...
- vi中如何去除高亮显示的单词
在vi命令行模式下输入:set nohlsearch 单词不高亮显示:set hlsearch 单词高亮显示: 如果再次打开仍然显示,则可以随便搜索一个不存在的单词,然后保存,重新打开高亮不在显示:
- Zabbix探索:Proxy没有回传任何数据
因为Zabbix使用Puppet搭建的,实际上是通过脚本安装的,为了偷懒,将脚本都写一块去了,后来发现Proxy的配置和Zabbix的配置不同,又偷懒一次,复制了一下,但是为了调整脚本使用的便捷性,将 ...
- 深入了解JavaScript中的关键字
this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,下面分四种情况,详细讨论this的用法,感兴趣的朋友可以了解下. this是Javascri ...
- gSoap的 “error LNK2001: 无法解析的外部符号 _namespaces”解决方法
gSoap是C/C++开发webService服务第三方的公开类库. 出现上述错误是因为缺少必要的头文件导致的. 在用wsdl2h生成头文件的时候,一并生成了类似 xx.nsmap 的文件,这个文件实 ...
- NOIP2012 同余方程
1同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行 ...