android apk版本适配,android 下载apk并安装,可用于更新版本用途(适配7.0或7.0以上系统)...
哥们点个赞再走呀
制作不容易,条件允许情况下,打赏一下,谢谢
作者使用xUtils下载文件,如使用其他框架下载,可在下载逻辑进行修改
AndroidManifest
android:usesCleartextTraffic="true"
...>
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
file_paths.xml
下载逻辑和安装
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
permission();
}
//点击下载按钮
public void onDownload(View view) {
if (permission() == false) {
Toast.makeText(this, "未获取权限", Toast.LENGTH_SHORT).show();
return;
}
downLoad();
}
//下载文件
private void downLoad() {
//apk下载链接
String apkUrl = "http://xxx.apk";
//文件路径
String filePath = getExternalCacheDir() + "/Download/file.apk";
//下载
RequestParams params = new RequestParams(apkUrl);
params.setSaveFilePath(filePath);//保存路径
x.http().post(params, new Callback.ProgressCallback() {
@Override
public void onSuccess(File result) {
installAPK(MainActivity.this, result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
@Override
public void onWaiting() {
}
@Override
public void onStarted() {
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
Log.i("MainActivity", "正在下载:" + (int)((float)current/total * 100));
}
});
}
//安装apk
public void installAPK(Context context, File apkFile) {
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {// 判断版本大于等于7.0
uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", apkFile);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
} else {
uri = Uri.parse("file://" + apkFile);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
intent.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(intent);
}
//获取权限
private boolean permission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int REQUEST_CODE_CONTACT = 101;//授权回调标识
//需要的权限
String[] permissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE //下载的apk保存到手机的权限
};
if (checkSelfPermission(permissions[0]) != PackageManager.PERMISSION_GRANTED) { //未授权
requestPermissions(permissions, REQUEST_CODE_CONTACT); //申请权限
return false;
} else {
return true;
}
}
return true;
}
}
制作不容易,条件允许情况下,打赏一下,谢谢
android apk版本适配,android 下载apk并安装,可用于更新版本用途(适配7.0或7.0以上系统)...相关推荐
- android应用市场点击下载APK安装详解
Android系统启动篇 1,<android系统启动流程简介> 2,<android init进程启动流程> 3,<android zygote进程启动流程> 4 ...
- 怎样从一个手机上安两个不同版本的软件_一部手机上怎么安装两个不同版本的微信?一部手机安装两个不同版本微信的方法...
一部手机上怎么安装两个不同版本的微信?一部手机安装两个不同版本微信的方法.很多朋友都不是很清楚,其实方法很简单的,下面小编就为大家介绍一下,一起来看看吧. 1.安卓微信双卡方法:准备工作 从上图我们可 ...
- android服务下载apk,Android 一个简单的版本更新下载apk小示例
一.简介: 1.运用 okhttp + notification 通知栏带进度的下载apk,下载完毕后并自动安装,如果用户取消可在通知栏点击安装,点击一次通知栏移除,同时支持自动静默下载(后台默默下载 ...
- 使用Android自带的DownloadManager下载ApK并安装
一.在 AndroidManifest.xml 中的准备 进行网络请求,需要申请<uses-permission android:name="android.permission.IN ...
- Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
上一篇:Android 天气APP(二十五)地图天气(下)嵌套滑动布局渲染天气数据 效果图 开发流程 1.开发前言 2.上传应用到分发平台 3.版本数据请求与存储 4.检查版本更新.自定义更新提示弹窗 ...
- android apk自动安装包下载,apk安装包管理app下载-apk安装包文件管理 安卓版v13-PC6安卓网...
apk安装包文件管理app是一款实用系统应用,apk安装包文件管理app是个小巧好用的手机内安装包管理工具.apk安装包文件管理app让你可快捷的管理手机里有意或无意下载的各种安装包. 软件介绍 ap ...
- matlab下载保姆级安装教程,哪个版本比较好些?
Matlab最新版是款功能实用性强的商业数学工具.Matlab官方版可以用于分析数据.开发算法.创建模型,数据图表生成.APP打包.APP开发.并且Matlab还广泛应用于:数据分析.无线通信.深度学 ...
- 下载了最新版本flash player,还是不能安装,还是提示版本低(转)
当我们使用Internet Explorer 9(IE9)浏览器访问含有大量Flash元素的网页时,可能会发现iexplorer.exe进程占用了大量的CPU资源,多开几个这样的页面就会严重影响到系统 ...
- 多个linux发行版本混合安装盘,使用 MultiBootUSB 安装多个 Linux 版本
导读 我喜欢通过 U 盘尝试不同的 Linux 发行版.它让我可以在真实的硬件上测试操作系统,而不是虚拟化的环境中.此外,我可以将 USB 插入任何系统(比如 Windows 系统),做任何我想要的事 ...
最新文章
- 顶会ASPLOS 新成果解析:用“弹性异构”防御DNN加速器对抗攻击
- 独家 | 揭秘出行巨头Uber的机器学习平台与团队
- python将照片转文字_Python将图片转化成文字
- 对于下一代互联网的畅想
- reading notes -- Amazon.com Recommendations: Item-to-Item Collaborative Filtering
- nginx 根据目录指定root_CentOS(7.6)基本操作与Nginx配置
- Learn OpenGL(五)——定义自己的着色器
- 5图片展示_拼多多搜索【智能创意】推广5大功能升级!
- Python SimpleHTTPServer – Python HTTP服务器
- JavaScript我学之七数组
- nest.js 使用express需要提供多个静态目录的操作
- ali p3c规则扩展-集成sonar
- 基础——内部RC振荡电路、外部晶振、RCC、RTC
- 彩虹易支付全开源码全新完全开源无任何加密易支付程序
- python车牌识别系统开源代码_python利用百度云接口实现车牌识别的示例
- Vue使用Upload上传图片报错:TypeError: Cannot create property 'xxx' on string 'xxxx'
- 谨防Wi-Fi时代的***屠城
- html页面的dtd是什么意思,html dtd文件解释
- 侯捷C++八部曲笔记(二、STL标准库和泛型编程)
- 根据csv文件按照标签划分文件夹数据集
热门文章
- Python基于Django酒店宾馆客房预定网站设计
- Unity的Vsync Count垂直同步原理剖析
- 超硬核,30 张图解 HTTP 常见的面试题
- [CTF从0到1学习] 二、CTF 密码学
- 【乐绘派】Audition专业音频后期制作教程 | 1-软件简介
- KUDU(二)kudu架构设计
- mysql备份和导入_mysql 备份和导入
- golang常用库之-操作redis go-redis/redis库、 go-redsync/redsync库(redis分布式锁)
- 苹果手机恢复出厂设置在哪里?恢复出厂设置方法介绍
- 实现 linux 终端上不同字体颜色显示