Android在线更新 远程安装程序

第一步:使用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,String,File,url,button,installer)