Android6.0+ apk下载及安装出现的权限问题

波兰球之战1.3.0安卓版安全下载与安装全攻略 APK文件是Android应用程序的安装包格式,其原理是通过打包代码、资源与清单文件实现跨设备部署。在移动游戏分发中,第三方APK下载能绕过区域限制,但需重视安全验证机制。通过MD5校验和病毒扫描可降低风险,例如波兰球之战1.3.0版本需验证文件完整性。这种技术方案适用于获取未上架官方商店的应用更新,本文以热门休闲策略游戏为例,详解从安全下载到安卓环境配置的完整实践流程,涵盖APK签名检查与权限管理核心环节。 阅读详情

1、下载apk创建流时出现错误:java.io.FileNotFoundException: /storage/emulated/0/app/update/main.apk (Permission denied)

public static File getFileFromServer(String path, ProgressDialog pd) throws Exception {
        //如果相等的话表示当前的sdcard挂载在手机上并且是可用的    
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            //获取到文件的大小     
            pd.setMax(conn.getContentLength());
            InputStream is = conn.getInputStream();
            File file = new File(Environment.getExternalStorageDirectory() + app/update + "/", "main.apk");

            FileOutputStream fos = new FileOutputStream(file);//写入字节流
            BufferedInputStream bis = new BufferedInputStream(is);
            byte[] buffer = new byte[1024];
            int len;
            int total = 0;
            while ((len = bis.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
                total += len;
                //获取当前下载量    
                pd.setProgress(total);
            }
            fos.close();
            bis.close();
            is.close();
            return file;
        } else {
            return null;
        }
    }

这个报错出现在以上代码中的写入字节流步骤。导致这个的原因是android6.0以后对权限的控制更严格了,我们仅在Manifest文件中添加这两个权限是不够的,需要动态申请权限。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
a、一种方法 在读写之前加入以下代码

        int REQUEST_EXTERNAL_STORAGE = 1;
        String[] PERMISSIONS_STORAGE = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };
        int permission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }   



2、7.0安装apk时报错提示:android.os.FileUriExposedException: file:///storage/emulated/0/app/update/main.apk exposed beyond app through Intent.getData()

	    intent.setAction(Intent.ACTION_VIEW);
	    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	    //执行的数据类型   
	    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");//
	    context.startActivity(intent);

报错在Uri.fromFile这个方法上。7.0为了提高安全性,添加了这种私有目录访问限制,此举是为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。这里就需要了解FileProvider这个类了。provider是android的一大组件,FileProvider顾名思义就是类似一个文件共享接口。还是在此代码基础上我们来用这个实现7.0+的安装

a.首先  增加一个xml文件夹在res下,然后新建一个xml文件,名字如pathlist.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <external-path
            name="external_storage_root"
            path="."/>
    </paths>
</resources>

其中paths节点就是可访问的路径列表,external-path是路径,是一个关键字。这里的.代表了 Environment.getExternalStorageDirectory()。
如果你将path设为path="app",那么它代表着根目录下的app目录(/storage/emulated/0/app)

b.接着 在AndroidManifest.xml清单文件中注册provider。

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.kz.target.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/pathlist"/>
        </provider>

这里的resource就是上面增加的pathlist.xml文件,名字注意一致。这里面重要的是authorities标识,名字你可以换成任意字符串。

c.使用FileProvider

        Intent intent = new Intent(Intent.ACTION_VIEW);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            String authority = context.getPackageName() + ".provider"; //注意名字和注册的authorities一致
            Uri contentUri = FileProvider.getUriForFile(context, authority, file);
            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        } else {
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android" +
                    ".package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        context.startActivity(intent);



兼容android10下载apk后无法安装问题 android兼容问题比较多,不仅仅是各种型号手机的兼容,SDK版本升级也得兼容,这不,今天发布了一个APK,android 9以下手机能在线下载最新APK后能安装,android 10就不行了,网上查阅一下资料,因为android权限控制的更严了,经测试如下方法可以解决,供参考。 1、AndroidManifest.xml添加权限 <!-- 安装需要的权限 --> <uses-permission android:name="android.permi... 阅读详情

相关推荐

第十篇|网络子系统 ②——无损以太网、PFC/ECN、DCQCN 与拥塞可视化

网络部分了解了解

qq_37535542的博客 1874

安卓模拟器、HAXM、Hyper-V

刚才打算用 Android Studio 配套的模拟器测试一个 apk,谁知启动虚拟设备的时候遇到 “Unable to open HAXM device: ERROR_FILE_NOT_FOUND” 这样的报错。 有人在 Windows 10 上通过禁用 Hyper-V 并重装 HAXM 解决了该问题。此法在我的环境中有效。简单查了一下,Hyper-V 和 HAXM 都是虚拟化技术。前者是微软...

纸箱猪的专栏 6572

解决Keil uVision许可证管理中Unknown Product错误

嵌入式开发中,IDE工具的许可证管理是确保开发环境正常运行的关键环节。Keil uVision作为ARM架构的主流开发工具,其许可证系统采用加密验证机制,通过产品版本识别实现授权控制。当出现Unknown Product错误时,通常源于版本兼容性问题或区域发行版差异,这直接影响开发工具链的可用性。特别是在维护历史项目或使用中国特供版时,开发者常会遇到此类问题。通过分析许可证类型、调整安装配置或建立虚拟化开发环境等工程实践方案,可以有效解决这类授权验证故障,保障嵌入式项目的持续集成与交付效率。

weixin_33743248的博客 363

Android系统权限和root权限

Android权限说明 Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制, Android系统权限相关的内容, (一)linux文件系统上的权限 -rwxr-x--x system   system       4156 2012-06-30 16:12 test.apk. 代表的是相应的用户/用户组及其他人对此文件的访问权限,

12万+

VS Code配置Java开发环境避坑指南:从JDK到Spring Boot插件全流程

本文详细介绍了在VS Code中配置Java开发环境的完整流程,涵盖JDK选择、环境变量配置、核心插件安装、构建工具优化及Spring Boot项目专项设置。特别针对常见问题提供避坑方案,帮助开发者快速搭建高效稳定的开发环境,提升Java和Spring Boot开发效率。

weixin_28839699的博客 979

CPU也能跑大模型?手把手教你用vLLM离线部署Qwen2.5-7B-Instruct(附性能优化技巧)

本文详细介绍了如何在CPU服务器上高效部署Qwen2.5-7B-Instruct模型,通过vLLM框架和一系列优化技巧实现离线推理。内容包括环境配置、模型加载优化、性能调优及生产环境部署方案,帮助开发者在资源有限的情况下也能运行大语言模型。

weixin_28691741的博客 492

Android6.0权限问题导致下载没效果

下午下载东西和保存图片的时候碰到open failed: EACCES (Permission denied) 这个很明显就是权限的问题,我添加了权限 但是在手机上还是不行,突然记起来我运行的环境是6.0.1,想到了6.0最大的变化就是权限的处理 百度到了这段话 Android6.0系统默认为targetSdkV

bug的博客 5996

使用PaddleOCR识别查验平台验证码

PaddleOCR识别国税查验平台验证码

m0_63932300的博客 1268

android 11安装apk自动获取权限

为获取除android.permission.MANAGE_EXTERNAL_STORAGE外的所有权限。为了解决android.permission.MANAGE_EXTERNAL_STORAGE,需要额外添加enableManageExternalStorage(packageName, resAppId);由于android 11以上版本对于读写权限的进一步限制,安装的apk获取权限的流程又加了一步,对于客户来说多半步也算复杂,根据之前的经验,在安装流程后打开全部权限即可。

通信侠的博客 2417

量化 insider 爆料! 散户打板必亏?(打板必看!量化资金如何“隔日砸盘”收割散户)

量化开发 insider 爆料💥 散户追的涨停板📉,可能是机构故意做的陷阱!本文从技术视角拆解“涨停陷阱”,帮你看清市场真实逻辑🧠。

XiaoqiangClub的博客 451

VMware16虚拟机:安装Windows10系统---超详细教程

VMware16虚拟机:安装Windows10系统---超详细教程

MQ0522的博客 3万+

Android下载apk并安装apk(用于软件版本升级用途)

Android下载apk并执行安装

qq_41008818的博客 1万+

4D毫米波雷达天线设计

多种天线布局方案介绍、天线设计要点介绍

5734

Android6.0以下安装apk时,出现解析错误的问题的修复

笔者最近在做一个项目时,需要从app内部,从远端下载apk进行安装的需求。 这种功能的实现已经有文章讲了很多,主要需要注意的时6.0的动态权限申请,7.0的 StrictMode策略,已经8.0的apk安装权限问题。 在顺利走通了7.0和8.0版本的流程后,笔者却发现在6.0的版本上,竟然无法安装,爆出的错误为:解析软件包时出现问题。 6.0的动态权限必定是已经申请过了。这种错误通常是因为apk没...

zzg080643的博客 5796

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

DownloadManager+MaterialDialog下载进度和6.0安装APK和“”应用未安装“”问题

首先来个图: 附个链接: material-dialogs再附个链接(以微信的APK下载地址为例吧): http://gdown.baidu.com/data/wisegame/8d5889f722f640c8/weixin_800.apk系统下载器DownLoadManager本身下载在通知栏中都有进度条,但是我想自己手动弹出一个dialog显示进度,所有就有了使用内容观察者ContentO

大雄的专栏 8435

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android 6.0 内部更新apk 解析出错

Android 6.0 内部更新apk 解析出错问题bug定位解决方案综述 问题 Android 6.0 内部更新功能,安装apk时,解析数据出错。 bug定位 1、有可能安装包没有下载成功,或者下载的安装包不完整,这个需要自己排查。 2、有可能你是把安装包写在了cache里面了,这样导致Android 6.0以下的 安装不成功。 解决方案 1、针对第一个bug的定位,自己查看到底是否正确下载了apk; 2、针对第二个bug定位,那就是权限的问题。直接上代码 if (Build.VERSION.SDK_

honeylife的博客 1080

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【解决】APK下载到Cache目录安装失败的问题

手机调试环境:SDK_INT=23(安卓6.0 ) 1. 下载的APK(APK本身没有问题),保存在应用缓存目录下: /data/user/0/[packagename]/cache 2. 在使用下面代码安装的时候提示“解析错误:解析软件包时出现问题”。 Intent intent = new Intent(Intent.ACTION_VIEW); inte

哦了 3336

android安装apk提示版本号不同,android 安装apk 遇到的问题

很多应用都是采用内部下载的方式,版本升级后可以实时更新最新应用,这样的体验肯定比跳转到浏览器好得多!而应用商店审核周期长,所以内部下载更新就显得尤为重要!下面是Android不同版本需要适配安装的问题:Android6.0,需要动态申请权限,读取写入。Android7.0,需要通过fileprovider的方式创建UriAndroid8.0,需要申请【安装未知来源应用权限】具体代码:/*** 兼容...

weixin_39772388的博客 634

ionic android n权限,ionic权限问题

ionic 在Android8.0以上会出现相机打不开,下载apk打不开的情况,为了解决以上问题,具体方案如下1 插件 cordova-plugin-android-permissions 1.0.0安装插件 cordova pluign add cordova-plugin-android-permissions2 相关的拍照权限```function checkPermissions(...

weixin_33610780的博客 455

Android系统自带下载DownloadManager使用方法完美实现

1,关于IMEI获取的问题。

一现灵光 3万+

android app升级失败原因,2019-06-27 Android app 升级遇到问题

1.手机版本更新时 适配5.0 6.0 7.0 因为6.0以后Android安装apk api 变化 downloadmanager 下载完成之后 获取apk 的uri 6.0以上安装方法改变 需要进行兼容兼容方法 :public static void installApk(Context context, Uri apkPath) {File apkFile =new File(Environ...

weixin_31440053的博客 1507

升级apk和更新安装apk的整理

延迟展示对话框 (重点) private void initView() { .... //r:消息的执行操作 //delayMillis : 延迟时间,但是毫秒值 new Handler().postDelayed(new Runnable() { @Override public void run() {

kunkun5love的博客 1万+

Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

一、前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app。在线更新分为以下几个步骤: 1, 通过接口获取线上版本号,versionCode 2, 比较线上的versionCode 和本地的versionCode,弹出更新窗口 3, 下载APK文件(文件下载) 4,安装APK 在线更新就上面几个步骤,前2步...

zwluoyuxi的专栏 277

Android 系统(98)---Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)一、前言app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app。在线更新分为以下几个步骤: 1, 通过接口获取线上版本号,versionCode 2, 比较线上的versionCode 和本地的versionCode,弹出更新窗口 3, 下载APK文件(文...

zhangbijun1230的专栏 1394

Android开发之下载Apk安装的方法兼容Android7.0和8.0及以上

具体查看代码: 首先在清单文件配置三个权限读写权限和请求安装权限(兼容Android8.0手机)如下: <!--安装apk权限--> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.per

xiayiye5的博客 1885

【Android】Android中Apk的下载与安装

相信很多应用都是采用内部下载的方式,这样的体验肯定比跳转到浏览器好得多!而应用商店审核周期长,无法实时更新最新应用!所以内部下载更新就显得尤为重要! 1.要美观好看,给用户实时的反馈下载情况: 界面体现为下载百分比%,下载速度 kb/s,圆环进度 2.下载完成后要自动安装: Android6.0,需要动态申请权限,读取写入。 Android7.0,需要通过fileprovider的方式创建...

2783
上一篇: Android 崩溃日志添加
下一篇: SQLite表导出csv文件
pylduck
博客等级 码龄14年 351粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值