准备工作1.将下载的afinal库放到项目中2.通过获取当前应用版本号与接口提供的版本号进行比对,如当前版本号小于接口所提供版本号则进行更新apk操作,获取应用当前版本号代码如下
private int getVersionCode() { int code = 0; try { // 获取packagemanager的实例 PackageManager packageManager = getPackageManager(); // getPackageName()是你当前类的包名,0代表是获取版本信息 PackageInfo packInfo = null; packInfo = packageManager.getPackageInfo(getPackageName(), 0); code = packInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return code; }
第一部分 activity部分
public class MainActivity extends Activity { FinalHttp fh; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_update).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { update(); } }); } public void update() { //apk安装路径 String apkPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/qq.apk"; //判断安装路径是否存在同名APK,若存在则删除该APK File f = new File(apkPath); if (f.exists()) { f.delete(); } fh = new FinalHttp(); //第一个参数为文件下载地址 第二个参数为APK安装路径 fh.download("http://gdown.baidu.com/data/wisegame/4ae6d2d7378e6cdf/QQ_122.apk", apkPath, new AjaxCallBack<File>() { @Override public void onStart() { super.onStart(); Toast.makeText(getApplicationContext(), "开始下载", Toast.LENGTH_SHORT).show(); } //count为下载文件的总长度,current为当前下载的长度 @Override public void onLoading(long count, long current) { super.onLoading(count, current); int progress = 0; if (current != count && current != 0) { progress = (int) (current / (float) count * 100); } else { progress = 100; } } @Override public void onSuccess(File t) { super.onSuccess(t); Toast.makeText(getApplicationContext(), "下载完成", Toast.LENGTH_SHORT).show(); installApk(t); } @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); Toast.makeText(getApplicationContext(), "下载失败", Toast.LENGTH_SHORT).show(); } }); } //安装APK的方法 private void installApk(File t) { Toast.makeText(MainActivity.this, t.exists() + "", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.setDataAndType(Uri.fromFile(t), "application/vnd.android.package-archive"); startActivity(intent); } }
第二部分 布局中的部分
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn_update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="update APK!" /> </RelativeLayout>
第三部分 配置文件部分
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.liying.downloadtest"> <!--请求网络权限和SD卡读写权限--> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>