标签:android style blog http io color ar os 使用
原文: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 style blog http io color ar os 使用
原文地址:http://www.cnblogs.com/tc310/p/4082758.html