android外部存储读写权限问题

今天在做一个实现应用内更新的模块,在把下载的apk文件存入外部存储是遇到一个问题,最后终于解决了。现将过程记录下来。
我们知道,android分内部存储和外部存储,我们通常的理解就是除了sd卡的就是内部存储,而sd就是外部存储。现在大部分手机都没有sd卡,而是16G,8G什么的,其中并不是全部是内部存储,而是有一部分是像SD卡一样也是外部存储。
我们的应用程序就是处于内部存储,他的路径是data/data/<包名>,如果我们想把下载的文件下载在这里,调用Context类的getFileDir()就可以了,但是这样的话,该apk处于应用内部,就无法被其他应用程序使用了,使用如下代码去执行安装时,就会失败了:

/**
         * 安装新版本应用
         */
        private void installApp() throws  Exception{
            if(!file.exists()) {
                return;
            }
            // 跳转到新版本应用安装页面
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.parse("file://" + file.getPath()),"application/vnd.android.package-archive");
            context.startActivity(intent);
        }

所以我们需要下载到外部存储中,调用Context类的getExternalFilesDir()就可以了,另外需要在清单文件中添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
这样确实下载成功了,但是之后在华为E887(可能记错,但没关系)中出错&#x

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 11引入了一些关于默认读写权限的重大变化,以增强应用程序的安全性和用户的隐私保护。以下是Android 11中默认读写权限的一些重要变化: 1. 外部存储访问限制:在Android 11中,应用无法默认访问外部存储(如SD卡)上的任何文件。相反,应用需要通过使用新的媒体存储框架来请求访问这些文件。用户需要明确授予对文件的访问权限。这限制了恶意应用程序对用户存储中的敏感数据的访问。 2. Scoped Storage(范围存储):Android 11引入了Scoped Storage机制,它为应用提供了针对外部存储的更安全和更有序的访问方式。每个应用都有一个专用的目录,只能在该目录下访问自己的文件。其他应用无法访问此目录中的文件,这增强了用户数据的隐私保护。 3. 存储访问框架的变化:Android 11引入了新的媒体存储访问框架,允许应用通过ContentResolver API请求访问外部存储上的媒体文件(如照片和音乐)。应用程序需要明确请求用户访问这些文件的权限,并使用新的API来执行文件操作。 4. 设备和管理策略的限制:Android 11对某些设备和管理策略有了一些限制。例如,设备政策可以限制应用程序在外部存储上读取或写入文件的权限,并在设备上的目录中进行更严格的控制。 总而言之,Android 11使读写权限更加严格,通过引入Scoped Storage等机制来保护用户数据的隐私和安全。应用程序需要经过明确的用户授权来访问外部存储上的文件,并使用新的媒体存储访问框架来执行文件操作。这些变化提高了用户数据的安全性和隐私保护水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值