Android11 open failed: EACCES (Permission denied)的解决方法

这篇具有很好参考价值的文章主要介绍了Android11 open failed: EACCES (Permission denied)的解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下均用kotlin编写,没用过的请酌情参考,方法类似

1、首先Manifest中添加权限

这是Manifest文件的开头

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
<!--    必须要加下面两句-->
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

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

这两句必须加,但是上面那句会提示这样不能在谷歌商店上架,我自己编软件自己用所以不担心,如果真要商用,建议还是老老实实存私有空间,Android11开始应用好像不能在公共空间操作了,需要用户手动设置。

2、动态获取权限

主Activity的class里定义

private val readRequest = android.Manifest.permission.READ_EXTERNAL_STORAGE

在主Activity中的onCreate的方法中

val readFlag = ActivityCompat.checkSelfPermission(this,readRequest) != PackageManager.PERMISSION_GRANTED
//        var writeFlag = ActivityCompat.checkSelfPermission(this, writeContacts) != PackageManager.PERMISSION_GRANTED
            if(readFlag){
                if(ActivityCompat.shouldShowRequestPermissionRationale(this,readRequest)){
                    //引导用户打开读取联系人权限
                }

                ActivityCompat.requestPermissions(this,
                    arrayOf(readRequest),
                    100
                )

            }else{
                //getContacts()
            }

这个方法好像就是点开应用提示获取权限,当然这个权限是只能访问media文件(我不清楚这是什么类型的文件,就类似MP4格式?)

然后添加获取权限结果的函数,在onCreate方法外

当然我这里什么都没干,就弹了个提醒而已

override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        if (requestCode == 100) {
            if (grantResults.contains(PackageManager.PERMISSION_GRANTED)) {
                if (permissions.contains(readRequest)) {
                    Toast.makeText(this,"成功",Toast.LENGTH_SHORT).show()
                }

            }
        }
    }

好的走到这里已经做完了网上搜到的90%的教程了,当然剩下还有什么在Manifest的<application>标签中添加

android:requestLegacyExternalStorage=“true”

android:preserveLegacyExternalStorage=“true”

之类的都在Android11不管用了,低于11的可以试试。

3、接下来,正常运行代码,打开应用后进行授权

手机eacces权限被拒绝,android,kotlin,开发语言

 选择同意,之后切到后台,去系统设置进行手动用户授权

手机eacces权限被拒绝,android,kotlin,开发语言

手机eacces权限被拒绝,android,kotlin,开发语言

手机eacces权限被拒绝,android,kotlin,开发语言

手机eacces权限被拒绝,android,kotlin,开发语言

手机eacces权限被拒绝,android,kotlin,开发语言

手机eacces权限被拒绝,android,kotlin,开发语言

 之后切回app,就能正常使用外部公共空间了!

-----------------------------------------------------------------------------------------------------------------------

如果你看到了这里,那么你应该去看一下评论(不知道后面会不会没),评论大佬提到了一种Scoped Storage,去搜了一下发现有大佬详细解释了这种特性,

附上链接Android 11新特性,Scoped Storage又有了新花样_"tools:ignore=\"scopedstorage"_guolin的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-705690.html

里面提到了获取权限的简单方法,不需要再像上面那样手动开启权限了,代码如下

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R ||
        Environment.isExternalStorageManager()) {
    Toast.makeText(this, "已获得访问所有文件权限", Toast.LENGTH_SHORT).show()
} else {
    val builder = AlertDialog.Builder(this)
        .setMessage("本程序需要您同意允许访问所有文件权限")
        .setPositiveButton("确定") { _, _ ->
            val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
            startActivity(intent)
        }
    builder.show()
}

亲测好用!

到了这里,关于Android11 open failed: EACCES (Permission denied)的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux: Error: EACCES: permission denied Linux 解决方法

    原因:Linux终端创建文件夹无权限。 解决方法:输入命令 sudo chmod -R 777 /工作目录 例如: sudo chmode -R 777 /home/HDD sudo:是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。 -R:是指几连医用到目录里所有子目录和文件; 777:是指所有用

    2024年02月03日
    浏览(68)
  • listen EACCES : permission denied 127.0.0.1:80错误解决方法

    1.listen EACCES : permission denied 127.0.0.1:80错误原因   端口已被占用,说明有其他项目运行的是80端口   2.终端执行命令  netstat -ano   查看电脑正在执行的任务  3.任务管理器结束任务  找到对应的结束  

    2024年02月02日
    浏览(70)
  • Android 10以上出现的 android Permission denied 读写权限问题解决方法

    原因: 从Android 10 开始,应用即使申请了权限,也只能读写自己外部存储的私有目录,就是Android/data/对应应用包名 下的相关目目录。除此之外任何目录的读写都会被拒绝,并提示 android Permission denied。 解决方案 在 AndroidManifest.xml 文件中,在application标签中添加如下属性 and

    2024年02月03日
    浏览(66)
  • Error: listen EACCES: permission denied

    使用npm run dev 运行vue项目的时候遇到以下错误: 如果修改默认的5173端口,尝试不同端口,可以启动成功。 具体方法:修改package.json中的dev选项, 如下使用3000端口启动 使用管理员身份运行PowerShell 停止winnat服务:net stop winnat 启动winnat服务:net start winnat “winnat” 服务在 Wi

    2024年02月14日
    浏览(78)
  • 解决windows11下SSH不能连接远端服务器-Permission denied (publickey)-Permissions for ‘xxx‘ are too open-管道不存在等问题

    按照下面的步骤做一遍。我也搞不清哪些解决方式和哪些问题对应,多试一试就好了。 HostName和User换成对应的名字。 IdentityFile换成对应的密匙文件。 在搜索栏搜索服务: 确认电脑上有这两个服务: 状态和我上面设置的一样。(记得更改运行状态。我设置成正在启动/自动延

    2024年02月04日
    浏览(79)
  • 解决在Mac下使用npm报错:Error: EACCES: permission denied, mkdir ‘/usr/local/lib/node_modules/@vue‘

    详细如下: 原因说明:没有足够的权限在 /usr/local/lib/node_modules 目录下创建文件夹 这个错误表明你在安装或更新 Vue.js(@vue)包时,没有足够的权限在 /usr/local/lib/node_modules 目录下创建文件夹。 这通常是因为默认情况下,普通用户没有权限在 /usr/local/lib 目录中进行写入操作。

    2024年02月08日
    浏览(112)
  • 启动node服务报错Error: listen EACCES: permission denied 0.0.0.0:5000

    启动node服务报错: 解决方案: 将监听端口改成3000或者其他 修改后结果: 参考原文: Error: listen EACCES: permission denied_error when starting dev server: error: listen eacc-CSDN博客

    2024年02月22日
    浏览(82)
  • Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/appium‘

    在使用npm uninstall -g appium卸载appium的过程中报错 1、首先检查谁拥有该目录 它拒绝访问,因为 node_module 文件夹下的appium归 root 所有    因此需要通过将 root 更改为您的用户来更改此设置,但首先运行下面的命令来检查您当前的用户如何通过 OS X 中的命令行获取活动用户的名称

    2024年02月12日
    浏览(72)
  • nginx 查看日志 failed (13: Permission denied) 失败(13:权限被拒绝)解决

    权限被拒绝 用户不一致: 打开  nginx.conf 文件    (一般在  etc/nginx 目录下) 把  nginx 改为 root 用户已经统一,现在可以正常访问了    

    2024年02月15日
    浏览(85)
  • failed (13: Permission denied) 解决Nginx由于权限导致大文件不能上传的问题

    在使用Nginx作为代理服务器时,发现应用程序可以上传小文件,但无法上传大文件。查看Nginx日志,发现出现了以下错误信息: client intended to send too large body 。 要解决这个问题,您可以按照以下步骤进行操作: 打开Nginx的配置文件 nginx.conf 。 在配置文件中的 server 段落中添加

    2024年02月04日
    浏览(120)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包