下载好的apk自动进入安装界面
前言:
如何实现下载功能在这里就不多说了,我用的是xutils开源框架实现的。这里我主要讲的是如何让下载好的apk自动跳入安装界面而已。这个需求主要是对于软件的升级更新所用
。
实现步骤:
1、查看安卓系统上层的源码,找到PackageInstaller层的配置文件(AndroidManifest.xml) 点击下载安卓系统源码
2、在配置文件中查看意图配制信息,如下图
3、编写对于的安装方法:
private void installapk(File file) {
//配置apk安装入口,查看源码的主配置可知
Intent intent=new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
//文件作为数据源,且设置安装的类型
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
// startActivity(intent);这个是正常开启另一activity的方式,下面的是通过隐式意图开启
//隐式意图开启时需要实现对应的onActivityResult()方法
startActivityForResult(intent,0);
}
隐式意图方法的回调
//开启一个activity后,返回结果调用的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
enterMainActivity();
super.onActivityResult(requestCode, resultCode, data);
}
对上述方法来个简单解释。
参数传入的File file表示下载好的文件。因为此方法是在下载成功后调用的。而xutils框架有对于的下载成功的方法,下载成功的方法有对于的返回值file。算了,我还是贴一下用xutils下载流程的代码吧。(看成功回调方法即可)点击下载xutils框架jar包
/**
* 下载更新的apk方法
*/
private void downApk() {
//1、判断SD卡是否插上
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//2、获取SD卡路径
String path=Environment.getExternalStorageDirectory().getAbsolutePath()+
File.separator+"360soft1.apk";
Log.i(tag,"保存在"+path);
//3、发送请求,获取apk安装包并且保存到指定位置
HttpUtils httpUtils=new HttpUtils();
//4、发送请求,传递参数,第三个参数表示请求的回调方法,判断成功与否
httpUtils.download(mVersionUrl, path, new RequestCallBack<File>() {
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
//下载成功
File file = responseInfo.result;
Log.i(tag,"下载成功");
//提示用户安装,这里调用安装方法
installapk(file);
}
@Override
public void onFailure(HttpException e, String s) {
//下载失败
Log.i(tag,"下载失败");
}
//刚刚开始下载
@Override
public void onStart() {
super.onStart();
Log.i(tag,"开始下载");
}
/**
*
* @param total 下载文件的总大小
* @param current 当前下载位置
* @param isUploading 是否正在下载中
*/
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
Log.i(tag,"正在下载");
}
});
}
}
好了,以上就是简单实现自动进入安装界面的方法。其中涉及到其他逻辑就不必了解了,这里主要讲的是如何实现自动安装而已,不能跑题哦。
尾语:此文仅是个人的学习笔记,如有不妥敬请留言。