版本更新
来源:互联网 发布:java nanotime效率 编辑:程序博客网 时间:2024/05/16 05:33
package com.bwie.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
public class UpdateManager {
private Context mContext;//提示语private String updateMsg = "每一次升级,我们竭尽全力为广大OSCer们提供更优质的服务。细心的你,一定可以发现更新的细节。如果你喜欢,请考虑在各大应用市场给予我们五星好评!你的肯定,是开源中国不断进步的动力。";//返回的安装包urlprivate String apkUrl = "http://www.oschina.net/uploads/osc-android-v2.6.4-release.apk";private Dialog noticeDialog;private Dialog downloadDialog; /* 下载包安装路径 */private static final String savePath = "/sdcard/updatedemo/";private static final String saveFileName = savePath + "UpdateDemoRelease.apk";/* 进度条与通知ui刷新的handler和msg常量 */private ProgressBar mProgress;private static final int DOWN_UPDATE = 1;private static final int DOWN_OVER = 2;private int progress;private Thread downLoadThread;private boolean interceptFlag = false;private Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case DOWN_UPDATE: mProgress.setProgress(progress); break; case DOWN_OVER: installApk(); break; default: break; } };};public UpdateManager(Context context) { this.mContext = context;}//外部接口让主Activity调用public void checkUpdateInfo(){ showNoticeDialog();}private void showNoticeDialog(){ AlertDialog.Builder builder = new Builder(mContext); builder.setTitle("软件版本更新"); builder.setMessage(updateMsg); builder.setPositiveButton("立即更新", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); showDownloadDialog(); } }); builder.setNegativeButton("以后再说", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); noticeDialog = builder.create(); noticeDialog.show();}private void showDownloadDialog(){ AlertDialog.Builder builder = new Builder(mContext); builder.setTitle("正在下载新版本"); final LayoutInflater inflater = LayoutInflater.from(mContext); View v = inflater.inflate(R.layout.progress, null); mProgress = (ProgressBar)v.findViewById(R.id.progress); builder.setView(v); builder.setNegativeButton("取消", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); interceptFlag = true; } }); downloadDialog = builder.create(); downloadDialog.show(); downloadApk();}private Runnable mdownApkRunnable = new Runnable() { public void run() { try { URL url = new URL(apkUrl); 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(); } String apkFile = saveFileName; File ApkFile = new File(apkFile); FileOutputStream fos = new FileOutputStream(ApkFile); int count = 0; byte buf[] = new byte[1024]; do{ int numread = is.read(buf); count += numread; progress =(int)(((float)count / length) * 100); //更新进度 mHandler.sendEmptyMessage(DOWN_UPDATE); if(numread <= 0){ //下载完成通知安装 mHandler.sendEmptyMessage(DOWN_OVER); break; } fos.write(buf,0,numread); }while(!interceptFlag);//点击取消就停止下载. fos.close(); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } }}; /** * 下载apk * @param url */private void downloadApk(){ downLoadThread = new Thread(mdownApkRunnable); downLoadThread.start();} /** * 安装apk * @param url */private void installApk(){ File apkfile = new File(saveFileName); if (!apkfile.exists()) { return; } Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive"); mContext.startActivity(i);}
}
package com.bwie.test;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得控件 ImageView img=(ImageView)findViewById(R.id.imageView1); Animation anim=AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate); img.startAnimation(anim); anim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation animation) { Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } });}
}
// 检查版本更新
UpdateManager manager = new UpdateManager(this);
manager.checkUpdateInfo();
- 版本更新
- //版本更新
- 版本更新
- 更新版本
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- 版本更新
- iOS自定义实现日历控件
- 子类调用父类的构造函数
- 十.Android ContentProvider 实例——获取联系人
- vim-进阶
- QWidget中嵌入win32 window
- 版本更新
- js常用操作
- java多线程回调方法的理解
- 笔记本无法连接显示器 Windows 10 - Your PC can't project to another screen
- 十一.Android数据持久化方法之一——sharedPreferences
- iOS蓝牙控制模型
- 华丽的模态窗口弹出效果示例
- 物理学家揭示深度学习原理:神经网络与宇宙本质惊人关联
- 欢迎使用CSDN-markdown编辑器