注意:因为使用的xUtils来进行下载apk,所以要在Application里面onCreate()方法中进行加上 x.Ext.init(this); x.Ext.setDebug(true); //主类 public class MainActivity extends AppCompatActivity { String urlVersion = "http://www.地址.com"; String urlApk = 自己定义要更新的地址 private ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getServierVersion(urlVersion); } public void getServierVersion(String url){ new AsyncTask<String,View,String>(){ @Override protected void onPostExecute(String s) { super.onPostExecute(s); if(CommonUtil.getAppVersion(MainActivity.this) < 2){ showDialog(CommonUtil.getAppVersionName(MainActivity.this),"2.1.0"); } } @Override protected String doInBackground(String... params) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } }.execute(url); } public void showDialog(String oldName, String newName){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("版本更新") .setMessage("当前最新版本为"+newName+",手机版本为"+oldName+",是否跟新") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { pd = new ProgressDialog(MainActivity.this); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("正在更新..."); pd.setMax(100); downLoadApk(urlApk); } }).setNegativeButton("暂不更新", null).show(); } private void downLoadApk(String urlApk) { //设置下载地址 RequestParams params = new RequestParams(urlApk); //设置下载文件的路径 开始时要注意判断 sd卡状态是否可用 本demo省略 //可以用,也可以不用 // params.setSaveFilePath(Environment.getExternalStorageDirectory()+"/myapp/"); params.setSaveFilePath(getCacheDir()+"/myapp/"); //设置文件名 params.setAutoRename(true); //使用ProgressCallback进行文件下载 x.http().get(params, new Callback.ProgressCallback<File>() { @Override public void onSuccess(File result) { Toast.makeText(MainActivity.this,"下载成功,准备安装",Toast.LENGTH_SHORT).show(); Log.i("==========", "onSuccess: " + result); //apk下载完成后,调用系统的安装方法 日考题 提供的apk有问题的 不能安装 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(result), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } @Override public void onError(Throwable ex, boolean isOnCallback) { Log.i("==========", "onError: "); Toast.makeText(MainActivity.this,"apk下载失败",Toast.LENGTH_SHORT).show(); } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { Log.i("==========", "onError: "); pd.cancel(); } @Override public void onWaiting() { } @Override public void onStarted() { } @Override public void onLoading(long total, long current, boolean isDownloading) { //当前进度和文件总大小 Log.i("==========","current:"+ current +",total:"+total); //让进度条按 XX/100的格式显示 pd.setProgress((int) (current*100/total)); pd.show(); } }); } } //工具类public class CommonUtil { //获取当前版本号 public static int getAppVersion(Context context) { try { PackageManager packageManager = context.getPackageManager(); PackageInfo info = packageManager.getPackageInfo(context.getPackageName(),0); int versionCode = info.versionCode; return versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return 1; } //获取当前版本应用的名字 public static String getAppVersionName(Context context){ String versionName =""; PackageManager packageManager = context.getPackageManager(); try { PackageInfo info = packageManager.getPackageInfo(context.getPackageName(),0); versionName = info.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return versionName; } }
版本更新(简单的方法)
最新推荐文章于 2023-01-11 15:50:53 发布