Android应用程序实现自动更新功能4_实现的整体代码
2014-06-09 15:16
633 查看
安装的时候需要注意,需要开启设备“允许安装安卓市场上的应用”的选项。
其中对UI需要改变的地方通过发消息的方式:
延时发送消息:
整体的代码实现如下:
其中对UI需要改变的地方通过发消息的方式:
mHandler.sendEmptyMessage(DOWNLOAD);
mHandler.sendEmptyMessage(FINISH_DIALOG);
延时发送消息:
Message message = mHandler.obtainMessage(DOWNLOAD_FINISH); mHandler.sendMessageDelayed(message,2000);消息处理:
private Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case DOWNLOAD: mProgress.setProgress(progress); prostate.setText(progress+"%100"); break; case FINISH_DIALOG: showFinishDialog(); break; case DOWNLOAD_FINISH: finishDialog.dismiss(); ApkInstall(); break; default: break; } } }; }
整体的代码实现如下:
public class ApkupgradeActivity extends Activity { Button updateBtn; Button installBtn; String TAG = "ApkupgradeActivity"; private static final int DOWNLOAD = 1; private static final int DOWNLOAD_FINISH = 2; private static final int FINISH_DIALOG = 3; private ProgressBar mProgress; private int progress; Context mContext; private boolean cancelUpdate = false; private Dialog mDownloadDialog; HashMap<String, String> hashMap; Dialog finishDialog; TextView prostate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_apkupgrade); updateBtn = (Button) findViewById(R.id.btnUpdate); updateBtn.setOnClickListener(click); installBtn = (Button) findViewById(R.id.btnInstall); installBtn.setOnClickListener(click); mContext = getApplicationContext(); showNoticeDialog(); } OnClickListener click = new OnClickListener(){ @Override public void onClick(View v) { if(v.getId()==R.id.btnUpdate){ //showNoticeDialog(); checkUpdate(); //new downloadApkThread().start(); }else if(v.getId()==R.id.btnInstall){ ApkInstall(); } } }; private class downloadApkThread extends Thread{ @Override public void run() { dowloadApk(); //showDownloadDialog(); } } private void showDownloadDialog(){ AlertDialog.Builder builder = new Builder(ApkupgradeActivity.this); builder.setTitle(R.string.soft_updating); final LayoutInflater inflater = LayoutInflater.from(ApkupgradeActivity.this); View v = inflater.inflate(R.layout.softupdate_progress, null); mProgress = (ProgressBar) v.findViewById(R.id.update_progress); prostate = (TextView) v.findViewById(R.id.prostate); builder.setView(v); builder.setNegativeButton(R.string.soft_update_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); // 设置取消状态 cancelUpdate = true; } }); mDownloadDialog = builder.create(); mDownloadDialog.show(); // 现在文件 //downloadApk(); new downloadApkThread().start(); } private void showFinishDialog(){ AlertDialog.Builder builder = new Builder(ApkupgradeActivity.this); builder.setTitle(R.string.soft_finish_title); builder.setMessage(R.string.soft_finish_info); finishDialog = builder.create(); finishDialog.show(); Message message = mHandler.obtainMessage(DOWNLOAD_FINISH); mHandler.sendMessageDelayed(message,2000); } private void showNoticeDialog() { AlertDialog.Builder builder = new Builder(ApkupgradeActivity.this); builder.setTitle(R.string.soft_update_title); builder.setMessage(R.string.soft_update_info); builder.setPositiveButton(R.string.soft_update_updatebtn, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); // 显示下载对话框 showDownloadDialog(); } }); builder.setNegativeButton(R.string.soft_update_later, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); Dialog noticeDialog = builder.create(); noticeDialog.show(); } void dowloadApk(){ //String savepath = getApplicationContext().getFilesDir().getPath()+"/data/user/"; //String savepath = "/data/user/"; Log.v(TAG,"into the dowloadApk"); String upgradefile = "http://192.168.21.243/upgrade.apk"; URL url = null; try { url = new URL(upgradefile); } catch (MalformedURLException e1) { e1.printStackTrace(); } try { HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.connect(); int length = conn.getContentLength(); InputStream is = conn.getInputStream(); // File file = new File(savepath); // if (!file.exists()) // { // file.mkdir(); // } //File apkFile = new File("/mnt/nand/", "upgrade.apk"); //FileOutputStream fos = new FileOutputStream(apkFile); //FileOutputStream fos = getApplicationContext().openFileOutput("upgrade.apk",Context.MODE_PRIVATE); FileOutputStream fos = getApplicationContext().openFileOutput("upgrade.apk",Context.MODE_WORLD_READABLE); int count = 0; byte buf[] = new byte[256]; int numread = 0; do{ numread = is.read(buf,0,256); count += numread; try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.v(TAG,"dowloading the data numread:"+numread); progress = (int) (((float) count / length) * 100); mHandler.sendEmptyMessage(DOWNLOAD); if(numread >= 0){ fos.write(buf, 0, numread); } if (numread <= 0) { break; } }while(!cancelUpdate); fos.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } mDownloadDialog.dismiss(); if(!cancelUpdate){ mHandler.sendEmptyMessage(FINISH_DIALOG); } if(cancelUpdate) cancelUpdate = false; Log.v(TAG,"out the dowloadApk"); } private String getVersionCode(Context mcontext){ String versionCode = null; try { versionCode = mcontext.getPackageManager().getPackageInfo("com.example.apkupgrade", 0).versionName; } catch (NameNotFoundException e) { e.printStackTrace(); } return versionCode; } private boolean isUpdate() { Log.v(TAG, "into the isUpdate function"); try { URL url = new URL("http://192.168.21.243/version.xml"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setReadTimeout(5*1000); conn.setRequestMethod("GET"); conn.connect(); InputStream verstream = conn.getInputStream(); ParseXmlService service = new ParseXmlService(); hashMap = service.parseXml(verstream); Log.v(TAG, "version:"+hashMap.get("version")); Log.v(TAG, "name:"+hashMap.get("name")); Log.v(TAG, "url:"+hashMap.get("url")); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } AlertDialog.Builder builder = new Builder(ApkupgradeActivity.this); builder.setTitle(R.string.soft_update_state); final LayoutInflater inflater = LayoutInflater.from(ApkupgradeActivity.this); View v = inflater.inflate(R.layout.update_version, null); TextView curversion = (TextView) v.findViewById(R.id.currversion); curversion.setText(curversion.getText()+getVersionCode(ApkupgradeActivity.this)); TextView serversion = (TextView) v.findViewById(R.id.serversion); serversion.setText(serversion.getText()+hashMap.get("version")); TextView sername = (TextView) v.findViewById(R.id.sername); sername.setText(sername.getText()+hashMap.get("name")); TextView serurl = (TextView) v.findViewById(R.id.serurl); serurl.setText(serurl.getText()+hashMap.get("url")); builder.setView(v); builder.setPositiveButton(R.string.soft_update_updatebtn, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); // 显示下载对话框 showDownloadDialog(); } }); builder.setNegativeButton(R.string.soft_update_later, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); Dialog noticeDialog = builder.create(); noticeDialog.show(); return false; } public void ApkInstall(){ //Intent intent = new Intent(this,InstallActivity.class); //startActivity(intent); String apkpath = getApplicationContext().getFilesDir().getPath() + "/upgrade.apk"; Uri uri = Uri.fromFile(new File(apkpath)); Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(uri, "application/vnd.android.package-archive"); startActivity(intent); } public void checkUpdate() { if (isUpdate()) { // 显示提示对话框 showNoticeDialog(); } else { //Toast.makeText(mContext, R.string.soft_update_no, Toast.LENGTH_LONG).show(); } } private Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case DOWNLOAD: mProgress.setProgress(progress); prostate.setText(progress+"%100"); break; case FINISH_DIALOG: showFinishDialog(); break; case DOWNLOAD_FINISH: finishDialog.dismiss(); ApkInstall(); break; default: break; } } }; }
相关文章推荐
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- android自动更新功能实现 代码
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现
- Android应用自动更新功能的代码实现