首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 6.0: SD卡目录创建失败,尽管有权限

Android 6.0引入了运行时权限机制,对于一些敏感的权限,如读写外部存储(SD卡)权限,需要在运行时动态申请。如果在应用中没有正确处理权限申请逻辑,可能会导致SD卡目录创建失败的问题,即使应用已经被授予了相应的权限。

解决这个问题的方法是在应用中正确处理权限申请逻辑。以下是一般的解决步骤:

  1. 在AndroidManifest.xml文件中添加权限声明,确保已经声明了读写外部存储的权限:
代码语言:txt
复制
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. 在代码中检查是否已经被授予了读写外部存储的权限:
代码语言:txt
复制
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    // 如果没有权限,则动态申请权限
    ActivityCompat.requestPermissions(activity,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            REQUEST_CODE);
} else {
    // 如果已经有权限,则进行SD卡目录创建等操作
    // ...
}
  1. 处理权限申请结果,在Activity的onRequestPermissionsResult方法中处理权限申请结果:
代码语言:txt
复制
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限申请成功,进行SD卡目录创建等操作
            // ...
        } else {
            // 权限申请被拒绝,需要给出相应的提示或处理逻辑
            // ...
        }
    }
}

通过正确处理权限申请逻辑,可以确保在Android 6.0及以上版本中,应用能够正确创建SD卡目录。

关于Android开发、权限申请和SD卡目录创建等相关知识,可以参考腾讯云的文档和产品:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android6.0之后的权限机制对App开发的影响

随着Android系统的更新换代,每次重大更新的方面也逐步扩展,从4.*主要是增强功能,到5.*主要是美化界面,到6.*主要提高系统安全性,再到7.*和8.*主要支撑各种大屏设备,因此开发者需要对每个大版本的Android重新进行适配。其中6.*主要影响开发工作的升级包括权限管理和休眠模式。 对于权限管理,原本开发者只要在AndroidManifest.xml中声明相关权限,App安装完成之后即可默认获得这些权限。但是6.0引入了新的运行时权限管理机制,即使开发者实现已经声明App的权限,Android在App初次启动之时,仍会提示用户是否允许该App开启相关功能。倘若用户不同意App获得某些权限,毫无疑问App在运行过程中就可能无法正常工作。有关运行时权限的操作代码参见《Android开发笔记(一百五十八)运行时动态授权管理》。 对于休眠模式,即当手机屏幕关闭的时候,系统会自动进入休眠模式,这样原本正在运行的App将进入挂起模式,不能再进行访问网络等常用操作。当然为了保证App不被完全挂死,系统也会定时退出休眠模式,好比青蛙从冬眠之中苏醒过来,在苏醒期间,系统允许挂起的App重新恢复运行,继续先前设定好的任务。可是这个苏醒期是短暂的(通常只有几秒),一旦苏醒期结束,系统又重新进入休眠模式,于是那些App再次挂起,等待下次苏醒期的到来,如此往复。当然,只要手机恢复亮屏,比如用户按下电源键、用户给手机插上电源、手机接到来电等等,系统便自动退出休眠模式,所有挂起的App都会恢复正常运转。 下面逐个说明一下Android6.0的权限管理和休眠模式给App开发带来的影响,注意这些影响可对照《Android Studio开发实战:从零基础到App上线》一书的相应章节: 1、App的SD卡访问权限可能会被用户关闭,导致App无法正常读写SD卡。这点影响《Android Studio开发实战:从零基础到App上线》一书第4章的“4.3 SD卡文件操作”和“4.5 实战项目:购物车”。手机上查看App是否开启存储卡访问功能的界面如下图所示:

02

Android开发笔记(三十二)文件基础操作

File类是java中的文件操作工具类,它的常用方法如下: File构造函数 : 根据文件路径构造File对象 delete : 删除文件 exists : 判断文件是否存在 getName : 获取文件的文件名 getPath : 获取文件的目录路径 getParent : 获取上级目录路径 isDirectory : 判断是否为目录/文件夹 isFile : 判断是否为文件 length : 获取该文件的大小 list : 列出该目录下的所有文件(夹),返回String数组 listFiles : 列出该目录下的所有文件(夹),返回File数组 mkdirs : 创建目录/文件夹 renameTo : 重命名文件,其实就是移动文件到指定目录 获取文件大小有两种方式,一种是使用File类的length方法,另一种是使用FileInputStream类的available方法。下面是两种方式的示例代码: 1、length方式

01
领券