当前位置: 首页 > news >正文

Android app安装第三方应用

在Android设备上安装第三方应用通常涉及一系列步骤,这些步骤可能会因Android版本的不同而有所差异。但大致流程可以归纳为以下几个关键步骤:

1、开启权限

      开启“允许安装未知来源应用”,可以去安全设置那里设置允许安装未知来源,也可以使用代码跳转

2、在AndroidManifest.xml添加了权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

3、判断是否有权限

if(isUnknownSourcesEnabled){//权限没有打开则提示用户去手动打开openInstallPermission()}/*** 跳转到设置-允许安装未知来源-页面*/private void openInstallPermission() {Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);startActivity(intent);}/*** 判断* 是否允许* 安装位置来源*/public boolean isUnknownSourcesEnabled(Context context) {try {return Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS) == 1;} catch (Settings.SettingNotFoundException e) {return false;}}

4、执行安装 

filePath为绝对路径,例如demo.apk位于file/d/下,则filePath就为/file/d/demo.apk
   /*** 安装Apk*/public void installApk(String filePath) {File apkFile = new File(filePath);Intent intent = new Intent(Intent.ACTION_VIEW);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (apkFile.exists()) {Uri apkUri = FileProvider.getUriForFile(mContext(),  mContext().getPackageName() + ".fileprovider", apkFile);intent.setDataAndType(apkUri, "application/vnd.android.package-archive");intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);try {startActivity(intent);} catch (android.content.ActivityNotFoundException ex) {// 安装器未找到,可能用户未启用安装未知来源Logger.d("===安装器未找到==" + ex.toString());}} else {Logger.d("===文件不存在===");}}

5、对了android7以上还需要配置FileProvider

    <!-- 读写sd卡文件处理 --><providerandroid:name="androidx.core.content.FileProvider"android:authorities="csu.xiaoya.robotApp.fileprovider"android:exported="false"android:grantUriPermissions="true"tools:ignore="WrongManifestParent"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>

6、file_paths文件内容

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><root-path name="root" path="."/><files-path name="files" path="." /><cache-path name="cache" path="." /><external-path name="external" path="." /><external-files-path name="name" path="path" /><external-cache-path name="name" path="path" /><external-path name="external_files" path="."/>
</paths>

最后提示apk下载逻辑没有实现,需要资格去实现。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux服务器运维管理面板1panel
  • 【技术方案】技术解决方案过程文件(Word原件)
  • 【二分查找】--- 初阶题目赏析
  • HarmonyOS NEXT - Toast和Loading使用
  • IndexError: list index out of range | 列表索引超出范围完美解决方法
  • 【STM32 FreeRTOS】软件定时器
  • C/C++ 数学运算与数学函数
  • 【MySQL】表的设计
  • ECMAScript6语法:类
  • 常见编码形式特征汇总(1)
  • 数据库根据日期统计SQL编写记录
  • c语言-经典例题
  • Redis 为什么这么快?
  • Ant Design Vue 快速上手指南 + 排坑
  • 单片机内存映射
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • centos安装java运行环境jdk+tomcat
  • Codepen 每日精选(2018-3-25)
  • JavaScript设计模式系列一:工厂模式
  • Map集合、散列表、红黑树介绍
  • Promise面试题2实现异步串行执行
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 诡异!React stopPropagation失灵
  • 汉诺塔算法
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 三栏布局总结
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​力扣解法汇总946-验证栈序列
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #### golang中【堆】的使用及底层 ####
  • (10)STL算法之搜索(二) 二分查找
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (剑指Offer)面试题34:丑数
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)四层和七层负载均衡的区别
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET 设计模式初探
  • .NET 指南:抽象化实现的基类
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .Net多线程Threading相关详解
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 第一章] JavaScript 简史
  • [8] CUDA之向量点乘和矩阵乘法
  • [bzoj2957]楼房重建
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [HTML]HTML5实现可编辑表格