Android7.0+ 、Android8.0+Android9.0+、Android10.0+安装指定apk、下载后的apk方法

本文主要是介绍Android7.0+ 、Android8.0+Android9.0+、Android10.0+安装指定apk、下载后的apk方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:你的apk文件即使有文件读取权限,若想安装下载后的app,我们需要将apk文件暴露给系统安装进程

apk安装所需权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REPLACE_EXISTING_PACKAGE"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/><!-- 8.0必要权限  -->

第一步、

在AndroidManifest.xml添加文件提供者

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.fileProvider"       --------${applicationId}为你的报包名 .fileProvider内容提供者的名字android:grantUriPermissions="true"android:exported="false"><!--  元数据    --><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" />        ----------file_paths     见第二步
</provider>

第二步、

在xml文件夹中创建file_paths.xml     (res\xml\file_paths.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources><external-files-path path="/download" name="download"/>
</resources>

<external-files-path>代表的是/storage/emulated/0/Android/data/你的包名/files/目录、与Context.getExternalFilesDir()方法获得的相同

所以上面的意思就是将Context.getExternalFilesDir()+“/download"文件夹下面的数据暴露给系统

具体地址,根据你的需求来定  

<files-path name="name" path="path" /> 物理路径相当于Context.getFilesDir() + /path/<cache-path name="name" path="path" /> 物理路径相当于Context.getCacheDir() + /path/<external-path name="name" path="path" /> 物理路径相当于Environment.getExternalStorageDirectory() + /path/<external-files-path name="name" path="path" /> 物理路径相当于Context.getExternalFilesDir(String) + /path/<external-cache-path name="name" path="path" /> 物理路径相当于Context.getExternalCacheDir() + /path/

第三步(正式安装)、

eg:假如我的文件放在了Context.getExternalFilesDir()+"/download"+"/test.apk"

则:

Intent intent = new Intent(Intent.ACTION_VIEW);
String filePath=Context.getExternalFilesDir()+"/download"+"/test.apk";
File file = new File(filePath);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 24) {//大于7.0使用此方法Uri apkUri =FileProvider.getUriForFile(context, "你的包名.fileProvider", file);///-----ide文件提供者名//添加这一句表示对目标应用临时授权该Uri所代表的文件intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
}else {//小于7.0就简单了// 由于没有在Activity环境下启动Activity,设置下面的标签intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
}
startActivity(intent);

 

 

这篇关于Android7.0+ 、Android8.0+Android9.0+、Android10.0+安装指定apk、下载后的apk方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060703

相关文章

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.