热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android获取根目录权限,Android路径相关的方法及所对应的路径和权限申请

在开发过程中,经常会用到存储文件或数据的功能,就涉及到存储路径的获取,个人也经常会把这些获取搞混,今天简单总结一下,存个人理解,如有错误,请大家指正,也避免产生对读者的误导.安卓主

在开发过程中,经常会用到存储文件或数据的功能,就涉及到存储路径的获取,个人也经常会把这些获取搞混,今天简单总结一下,存个人理解,如有错误,请大家指正,也避免产生对读者的误导.

安卓主要有两个大的存储路径,一个是内部data/data/包名,一个是外部(sdcard)

内部这个主动选择的情况不多,多数是用来存放1.数据库,2.SharedPreference等等

外部sdcard也可以分为两类

路径种类

1内部存储

context.getCacheDir()

//对应的路径

/data/user/0/[package]/cache

2.Android/data/package路径,[package]是应用的包名

这个路径不需要获取权限,可以通过context获取

这种存储方式是谷歌推荐的,还有个好处是,如果应用卸载,应用的包名文件夹也会删除,不会残留垃圾文件

如下:

context.getExternalCacheDir();

context.getExternalFilesDir(null);

context.getExternalFilesDir("apks");//这个值会在files文件下生成对应值的文件夹

//对应的路径

/storage/emulated/0/Android/data/[package]/cache

/storage/emulated/0/Android/data/[package]/files

/storage/emulated/0/Android/data/[package]/files/apks

3./storage/emulated/0,外部存储的根目录

在这个目录读写都需要申请权限,申请方法看后边

这个目录存储的东西,就很难和应用产生直接联系了,如果卸载,不会主动删除,除了一些垃圾清理工具能识别,不然就一直在,比较烦,所以会逐步的被遗弃吧

Environment.getExternalStorageDirectory()

//对应的路径

/storage/emulated/0

总结

还有很多方法来获取存储路径

总的来说,判断需不要申请权限和路径是哪个,就看你用的获取路径方法是context的,还是Environment的

相对来说内部的,都是context,跟应用关联最高,因为这个context就是应用自己的

从Environment都是外部的存储,跟应用没啥关联,存过去了哪个应用都能读到,比较利于数据共享

权限申请

1.读写权限,放在清单文件中

2.权限动态申请的代码,api 6.0之后必须动态申请了

private static final int RC_PERMISSION = 10086;

private void requestPermission() {

//判断权限是否被授予

if (ContextCompat.checkSelfPermission(this,

Manifest.permission.READ_EXTERNAL_STORAGE)

!= PackageManager.PERMISSION_GRANTED

|| ContextCompat.checkSelfPermission(this,

Manifest.permission.WRITE_EXTERNAL_STORAGE)

!= PackageManager.PERMISSION_GRANTED) {

//去请求权限

ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE},

RC_PERMISSION);

} else {

//已经取得权限

//TODO

}

}

//重写这个方法接收权限请求结果

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == RC_PERMISSION) {

// 如果请求被拒绝,那么通常grantResults数组为空

if (grantResults.length > 0

&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

//已经取得权限

//TODO

} else {

//用户不给权限,给出提示弹窗

showWaringDialog();

}

}

}

附录

常用路径的获取方法及所对应的路径

Environment.getRootDirectory() = /system

context.getPackageCodePath() = /data/app/[package]/base.apk

context.getPackageResourcePath() = /data/app/[package]/base.apk

context.getFilesDir() = /data/user/0/[package]/files

context.getCacheDir() = /data/user/0/[package]/cache

context.getDatabasePath("test") = /data/user/0/[package]/databases/test

context.getDir("test",Context.MODE_PRIVATE) = /data/user/0/[package]/app_test

context.getExternalCacheDir() = /storage/emulated/0/Android/data/[package]/cache

context.getExternalFilesDir("test") = /storage/emulated/0/Android/data/[package]/files/test

context.getExternalFilesDir(null) = /storage/emulated/0/Android/data/[package]/files



推荐阅读
  • 1.什么是hashcode方法?hashcode方法返回对象的哈希码值在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有改变& ... [详细]
  • 下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ... [详细]
  • 技术点:1、通过已知的网页路径获得流2、把流转换成字节数组3、把字节数组转换成String字符串显示在TextView控件中一、获得流publicstaticSt ... [详细]
  • 开发笔记:Xunit测试使用个人小结
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Xunit测试使用个人小结相关的知识,希望对你有一定的参考价值。因工作中用到xunit测试,故总结下用法,以供个人参考使 ... [详细]
  • 一、在androidStudio中实现tabs比较简单,新建项目就可以选择tabs模板进行创建,默认实现tabs功能:直接运行项目就可以看到效果:可以说非常简单,但是我们在实际开发 ... [详细]
  • 在这一期的SendMessage函数应用中,我将向大家介绍如何利用消息函数来扩展树型列表(TreeView)控件的功能相信对于树型列表控件大家十分的熟悉, ... [详细]
  • 在写每日签到的时候,我居然使用的是本地时间被项目经理笑哭了。。。。,如果你在写单机游戏,没有游戏服务器,但又不想使用本地时间,就可以采用下面方法.方法总结:     1.使用 ... [详细]
  • 在MirrorAPI中,我们可以使用以下内容: ... [详细]
  • IDEA实用插件Lombok
    LombokLombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。通常,我们所定义的对象和b ... [详细]
  • Shiro 简单了解
    Shiro简单了解简单用过SpringSecurity安全框架后,再试试另一个安全框架——Shiro。1.Shiro简介ApacheShiro是一个强大且易用的Java安全框架:S ... [详细]
  • C#按值复制数组我有一个类型化的数组MyType[]types;我想制作这个数组的独立副本。我试过这个MyType[]types2newMyType[types.Length];t ... [详细]
  • IOSUITableView解析(一)
    UITableView的作用由于Iphone的大小有限,所以UITableView的作用是巨大的。比如QQ,微博等应用都用到了该控件。UITableVi ... [详细]
  • 问题说明最近看到Spring事务,在学习过程中遇到一个很苦恼问题搭建好Spring的启动环境后出现了一点小问题在启动时候却出现[java.lang.NullPointerExcep ... [详细]
  • pdf怎么把html变成pdf1 用AdobeAcroat8.1.2,打开网页后,页面右键菜单中会出现一个“转换为AobePDF的选项,点击就可以转换。 安装AdobeAcroba ... [详细]
  • TLB 缓存延迟刷新漏洞 CVE201818281 解析 ... [详细]
author-avatar
linxiuying261
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有