当前位置: 代码迷 >> Android >> Android在线更新 远路安装程序
  详细解决方案

Android在线更新 远路安装程序

热度:42   发布时间:2016-05-01 14:43:06.0
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();	}}


  相关解决方案