当前位置:首页 > 谈天说地 > 正文内容

Android外部存储无法访问问题解决方法

34资源网2022年01月28日 19:21573
 最近在做android 应用开发,ide是android studio ,  使用的版本配置如下:

compilesdk 32
buildtoolsversion '32.0.0'
defaultconfig {
    applicationid "com.example.gzpersonmanager"
    minsdk 21
    targetsdk 32
    versioncode 1
    versionname "1.0"
    testinstrumentationrunner "androidx.test.runner.androidjunitrunner"
}

可以看到使用的框架版本是32.1.1 ,使用的时最新的android 12 版本的api和sdk, 开发过程中涉及到一个场景,就是要把app的sqlite 数据库,通过外部存储,使用代码,写入app的内部数据存储 /data/data/packetname/files/databases/ 目录下,主要是为了数据库安全,简单来说就是一个把外部sqlite数据库文件,在app启动过程中,复制到app私有的data/data/目录下,实现数据库本地更新。
但是在过程中遇到一个错误,提示是 没有权限访问外部存储,刚开始是以为没有授权,检查

androidmanifest.xml ,文件,权限设置如下:是没有问题的。

<uses-permission android:name="android.permission.read_external_storage" />
<uses-permission android:name="android.permission.write_external_storage" />
<uses-permission android:name="android.permission.read_internal_storage" />
<uses-permission android:name="android.permission.write_internal_storage" />
<uses-permission android:name="android.permission.manage_external_storage" />

文件路径暴露映射也没有问题,配置如下:没有问题!

    <provider
        android:name="androidx.core.content.fileprovider"
        android:authorities="com.example.gzpersonmanager.fileprovider"
        android:exported="false"
        android:granturipermissions="true">
        <meta-data
            android:name="android.support.file_provider_paths"
            android:resource="@xml/authfileinfo" />
    </provider>

xml/authfileinfo 文件配置如下: 内部的/data/data/包名/files 和 外部存储路径都映射为真实地址。

没有问题。

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

但是真机调试,还是调试没有权限 ! 百度好多文件,所有的方法都测试了,依旧不行。

最后,终于发现一篇文章,官方在android 11 以后,使用的存储分区管理,默认所有的应用,可以访问自己的app私有内部存储,即 /data/data/包名/* 目录,和外部存储的媒体目录,外部存储的媒体目录需要授权后,即可访问,这些目录包括 相册,音乐,和视频目录,除此之外的其他外部存储目录,均无法访问,包括 sdcard/android/ 和 sdcard/download目录, 这就是主要原因,知道原因就好解决了。

1.使用存储分区访问, 网上很多帖子都说 requestlegacyexternalstorage =“true” 就可以,事实上,亲自测试,次方法在 targetsdk>29 以上的版本中,依旧无效。
可以使用scoped storage 适配来访问外部存储的其他目录,这是第一种方法。

2就是我现在使用的方法, 将框架版本改为28,即 targetsdk:28 , 然后重新删除app,然后sync gradle 工程,就可以完美解决这个问题。

现在就可以完美解决这个问题了。

到此这篇关于android外部存储无法访问问题解决方法的文章就介绍到这了,更多相关android外部存储无法访问内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/6647.html

分享给朋友:

相关文章

最近北京疫情怎么样了?最新涉及单位聚集性疫情14起

最近北京疫情怎么样了?最新涉及单位聚集性疫情14起

最近我很关注北京的疫情情况,因为那里有我的亲人。相信大家和我一样,都在关注北京疫情每日新增情况,很多人甚至预测北京很可能会出现当初武汉的局面。6月份在疫情严峻时,北京7天新增157病例,那么在这之后疫情是否得到控制了呢?截至7月12日,北京...

单身想找个女朋友,男的去哪里可以找个女朋友

单身想找个女朋友,男的去哪里可以找个女朋友

现在中国的男女比例失调,男的光棍要比女的多出3000w以上,这是个什么概念?代表着有3000w人是找不到对象的。所以很多单身男的就开始发愁了,单身想找个女朋友究竟到哪里找呢?说实话,小编也是一名单身汉,也正在找女朋友,虽然说,我没有找到女朋...

mac地址的作用是什么(理解mac地址的作用实验报告)

mac地址的作用是什么(理解mac地址的作用实验报告)

我们上网时会发现电子设备同时有IP地址和MAC地址,为什么上网会需要两个地址呢?我们需要先搞清这两个概念,IP地址即逻辑地址,可以简单理解为我们收快递时的收货地址,它通常是这个样子。MAC地址即物理地址,用来唯一地标识网络设备,用于本地网络...

融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

创业邦获悉,近日,镭昱半导体(Raysolve)宣布完成千万美元Pre-A轮融资,由高榕资本领投,耀途资本跟投,泰合资本担任独家财务顾问。至此,在短短半年内,镭昱半导体完成两轮融资,累计获得投资近亿元人民币。本轮融资将用于公司的全球首款标...

从商品采购到商品开发,叮咚买菜打造生态型供应链体系

作者:苏敏 编辑:房煜 随着社会发展,人们越来越重视食品品质和安全问题,消费趋势也从“性价比”转向“品价比”,对让人放心又有特色的好商品的需求正与日增多。这就给如今的零售商们带来了新的挑战,也促进了行业合作中零供关系的升级。 在12月3日...

如何删掉分页符空白页(空白页的解决方法)

如何删掉分页符空白页(空白页的解决方法)

我相信大家在编辑Word文档时,一定都遇到过这种恼人的情况,好不容易编辑完文档了,却发现末尾留下了空白页,想删除都无从下手。那么到底如何快速删除Word空白页呢?今天就来教大家几招,保证让你删得干干净净! 方法一:Shift键删除空白...