用户对app进行数据清理或卸载可以清理外部存储和内部存储下的所有文件目录。 3.2 内部存储 内部存储的文件夹其他应用和用户无法直接访问,可以用于存放敏感数据。...这个是在Android 5.0加入的api,创建和获取位于/sdcard/Android/media目录下的应用目录,该目录下的文件能够被其他应用访问和被MediaStore查询和获取。...为数众多的无责任开发者在这里胡乱创建文件夹,乱起名、乱放文件,普通用户根本无法判断哪些文件夹、文件是有用的,卸载app之后留下庞大的无法清理的垃圾文件,导致手机空间不足。...getExternalStoragePublicDirectory(String type) 使用频率极高的api,返回在根目录下的名为type的文件夹,我把它分为两种用法:一种是传入Environment...值得一提的是淘宝有在使用这个文件夹,用于保存它的商品分享截图,这个位置的确可以避免被微信封杀~哈哈 Environment.DIRECTORY_PICTURES用于存放各种“正式的”图片,强烈建议在这里创建文件夹存放你想要被用户发现的图片
总揽 Android文件系统从大的方面分为以下几类: 1、内部存储 2、外部存储 3、SharedPreferences 4、数据库 PS:SharedPreferences和数据库我们在另外的篇幅中详细介绍...内部存储空间 内部存储空间是 App 私有的存储数据的存储空间,系统会阻止其他应用对这部分数据的访问,并且在 Android 10(API 级别 29)及更高版本中,系统会对这些位置进行加密。...最好将此目录视为媒体/共享的存储部分。它是一个文件系统,可以保存相对大量的数据,并且在所有应用程序之间共享(不强制执行权限)。...数据管理权限 某些应用的使用场景时需要广泛访问设备上的文件,但无法采用注重隐私保护的存储最佳做法高效地完成这些操作。...应用可以通过执行以下操作向用户请求“所有文件访问权限”: 1、在清单中声明 MANAGE_EXTERNAL_STORAGE 权限。
getExternalFilesDir()获取到的目录文件; 如果你的文件没有必要控制访问权限,可以允许其它应用或者用户查看,那么外部存储是不错的选择; 注:在默认情况下应用程序安装到内部存储,您可以指定...android:installLocation属性在AndroidManifest.xml文件中,这样你的应用程序可以安装在外部存储器。...文件中进行声明,但是这种默认的权限可能会在以后的Android版本中变更,所以最好还是要在AndroidManifest中显式的进行读取权限声明,免得在以后的版本中程序出现问题,读取权限声明如下: <...private files: 这类文件属于你的应用程序专有,对于其他应用程序无法使用,也没有任何利用价值,虽然这部分文件对用户和其他程序是开放的。...注意:通过getExternalFilesDir(String type) 方法创建的文件在用户清除数据或者在应用卸载的时候会被系统清除掉,getExternalStoragePublicDirectory
如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。...当一个应用卸载之后,内部存储中的这些文件也被删除。对于这个内部目录,用户是无法访问的,除非获取root权限。...getExternalFilesDir(String type),type类型你可以根据自己存储文件的类型来定义,会响应的创建出该文件夹。...公有目录 公有目录里面的文件是可以被自由访问,即文件的数据对其他应用或者用户来说都是可以访问的,当应用被卸载之后,其卸载前创建的文件仍然保留。...说明: 使用频率极高的api,返回在根目录下的名为type的文件夹,我把它分为两种用法:一种是传入Environment的DIRECTORY常量再创建子目录使用;一种是传入appPackageName或者易被识别归属的名称创建子目录使用
检查介质可用性 在使用外部存储执行任何工作之前,应始终调用 getExternalStorageState() 以检查介质是否可用。介质可能已装载到计算机,处于缺失、只读或其他某种状态。...2.外部存储 2.1 私有存储 Context.getExternalCacheDir() Context.getExternalFilesDir() 创建的私有文件的地址是/sdcard/Android.../date/package_name下面,Android文件夹是隐藏文件夹,用户无法操作。...例如,以下方法在公共图片目录中创建了一个用于新相册的目录: public File getAlbumStorageDir(String albumName) { // Get the directory...getDir() 在您的内部存储空间内创建(或打开现有的)目录。 deleteFile() 删除保存在内部存储的文件。 fileList() 返回您的应用当前保存的一系列文件。
三、博客资源 ---- 前言 上一篇博客 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 中对注入的上下文进行了相关代理操作 , 插件包中的界面组件 PluginActivity...拷贝插件包 : 应用启动后 , 先将插件包 apk 文件从 assets 目录拷贝到 getExternalFilesDir(null) 目录中 ; 加载插件包 : 使用 PluginManager...加载插件包 ; /* 加载 " 插件 " 模块的 apk 文件 先将该插件包拷贝到 */ String path = getExternalFilesDir(null).getAbsolutePath...> 0) { // 这里取插件包中的第 0 个 Activity // 次序就是在 AndroidManifest.xml 清单文件中定义 Activity...在 " 宿主 " 模块中 , 使用 Resources 是无法获取到 " 插件 " 模块中的资源文件的 , 在使用 " 插件 " 模块中的资源文件之前 , 必须先加载其中的资源文件 ; /** *
本节课描述了如何使用 File API在Android文件系统中读写文件. File 对象适用于用一种没有跳跃的从开始一直到结尾的方式读写大量数据....为了在这些目录中的一个里面创建一个新的文件,你可以使用 File() 构造器,传入由上述指定了你的内部存储路径的方法提供的 File ....例如,下面的方法可以获取名称来自一个 URL 的文件,并使用这个名称在你的应用的内部缓存路径中创建一个文件 : public File getTempFile(Context context, String...这回返回外部存储上你的应用的私有路径的根路径 . 请记住当用户卸载你的应用时,getExternalFilesDir() 在一个路径中创建的路径都会被删除掉 ....这些路径名称确保了文件为系统正常对待 . 例如,存储在 DIRECTORY_RINGTONES 中的文件可以被系统的媒体搜索器归为铃声一类,而不是音乐 .
Environment.getExternalStorageDirectory() 在没有权限时,是无法访问的。...android:requestLegacyExternalStorage="true" 是一个用于在 Android 10(API 级别 29)及以上版本中启用传统外部存储权限模式的应用程序清单属性,Android...Android 11(API 级别 30) 中,读取媒体文件的权限受到了更严格的限制。...即使你声明了 READ_EXTERNAL_STORAGE 权限,你的应用程序也只能访问自己的媒体文件或存储在媒体库中的公共文件。...需要注意:在 Android 12 中,MANAGE_EXTERNAL_STORAGE 权限被修改为更高的保护级别,只有特定的系统应用程序才能获得这个权限,这是一个高危的权限。
它对应Context#getExternalFilesDir(String) Context.getExternalFilesDir(null)返回的路径。...以上便是Android官方文档上介绍的FileProvider所有支持的所以path类型,这些类型在Android手机内部存储区文件共享是可以行的通的,但对于外置SD卡是不行的,如果你想通过FileProvider.getUriForFile...FileProvider获取对外置SD卡的支持 从Android官方文档中没有找到FileProvider对外置SD卡的支持的任何说明,下面我们就从FileProvider的源码中找找是否有突破口,在FileProvider...FileProvider支持的path类型中有个TAG_ROOT_PATH,它对应的值为root-path,root-path在Android官方文档中是没有提及的,但我们不妨试一下,将FileProvider...然后我们允许程序,发现将path设置为root-path解决了FileProvider无法使用外置SD卡的问题。
老孟导读:Flutter 中获取文件路径,我们都知道使用 path_provider,但对其目录对含义不是很清楚,此文介绍 Android、iOS 系统的文件目录,不同场景下建议使用的目录。...pubspec.yaml 文件中添加依赖: dependencies: path_provider: ^1.6.14 执行命令: flutter pub get 文件路径 path_provider...getApplicationDocumentsDirectory 应用程序可能在其中放置用户生成的数据或应用程序无法重新创建的数据的目录路径。...在iOS上,此功能会引发[UnsupportedError]异常,因为无法在应用程序的沙箱外部访问。 在Android上,对应getExternalFilesDir(null)。...内部存储 用于保存应用的私有文件,其他应用无法访问这些数据,创建的文件在此应用的包名目录下,没有 root 权限 的手机无法在手机的 文件管理 应用中看到此目录,不过可以通过 Android Studio
但是,如果我们在每一个界面中把申请权限的代码全都写一遍,是很费力气的事情,而且不利于代码的维护,所以就需要封装。...Activity 的的方法, 该方法中反馈了权限的申请情况,返回的三个参数分别表示:请求码,被请求的权限数组,权限被允许情况的数组 (4)、某个权限在之前是否被拒绝过?...但是,我个人认为 在某个权限被拒绝之后,直接给出提示,告知用户可能会影响哪些功能并给出重新配置权限的引导会更好一些。...()获取当前APP对应的缓存目录,使用该方式不用申请读写SD的权限 * * 注意: * 不同品牌的手机对拍照处理不一样,个别手机中即便我们没有指定存储路径,也会存储照片到默认的地址中。...文中 DynamicPermissionTool 在 utils 包中,TakePhotoActivity 在 b26TakePhotoWithSysMethod 包中 2、官方参考资料: 系统权限的使用
示例 点击头像,然后弹窗,给出不同的选项,执行不同的操作。...,通过FileProvider创建一个content类型的Uri FileProvider.getUriForFile(this, "$packageName.fileProvider...后面剪裁跟相册都是一样的流程了。 总结 这个功能点最大的变动就是分区存储了,Android 10或许还能过度一下,但是Android 11以后就是强制执行分区存储了。...应用可以在不需要读写权限的情况下,访问自己的分区,执行读写操作,卸载之后分区文件也相应删除,所以就不能有把缓存文件放到竞品的文件夹下这种操作了,还是乖乖的吧。...在Android 10以下,还是要读写权限的,还是可以胡作非为的。
前言 今天分享的面试题是: Android在版本迭代中,总会进行很多改动,那么你熟知各版本都改动了什么内容?又要怎么适配呢? Android4.4 发布ART虚拟机,提供选项可以开启。...这一点其实就是限制了在应用间共享文件,如果需要在应用间共享,需要授予要访问的URI临时访问权限,我们要做的就是注册FileProvider: 1)声明FileProvider。...对于针对 Android 8.0 的应用,系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。...这应该是个bug,在Android8.0中出现,8.1中被修复。 我们的处理办法就是要么去掉设置方向的代码,要么舍弃透明效果。...--或者在AndroidManifest.xml中配置: android:usesCleartextTraffic="true" --> 移除Apache HTTP 客户端 在6.0中取消了对Apache
外部存储对数据提供的保护较少,所以系统不应该存储敏感数据在外部存储上。 特别地,配置和log文件应该存储在内部存储中,这样它们可以被有效地保护。 ...任何应用私有的文件的应该被放置在 Context.getExternalFilesDir返回的目录下,在应用被卸载的时候,系统会清理的就是这个目录。 ...另一些共享文件应该被放置在 getExternalStoragePublicDirectory(String)返回的目录中。 ...(API Level 9) Context API中的目录 getExternalFilesDir(String type)是应用在外部存储上的目录。 ...Android 4.4之前的版本要访问的话还是要声明读写权限的,如果没有在manifest中写权限,上面两个get方法都会返回null。
在Android 10 版本中,官方的改动较大,相应的开发者适配成本还是很高的。...MediaStore API在共享目录指定目录下创建文件或者访问应用自己创建文件,不需要申请存储权限 MediaStore API访问其他应用在共享目录创建的媒体文件(图片、音频、视频), 需要申请存储权限...1)获取(创建)私有目录下的文件夹 //在自身目录下创建apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2)创建私有目录文件 生成需要下载的路径...主要是在公共目录下创建文件或文件夹拿到本地路径uri,不同的Uri,可以保存到不同的公共目录中。..."> 2)在res目录新建xml目录,已建的跳过 在xml目录新建一个xml文件network_security_config.xml,然后在AndroidManifest.xml中Application
Android文件存储参考 思维导图 可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间。前者好比pc中的硬盘,后者好移动硬盘。...基本操作 使用外部存储,需要的权限,在 AndoridManifest.xml 中: 在app卸载之后,会被系统删除,我们应将应用的数据放于这两个目录中。...$cacheDir / $filesDir 安全性 * 在内部存储中, $cacheDir , $filesDir 是app安全的,其他应用无法读取本应用的数据,而外部存储则不是。...* 在外部存储中,这两个文件夹其他应用程序也可访问。 * 在外部存储中, $filesDir 中的媒体文件,不会被当做媒体扫描出来,加到媒体库中。 4.
在Retrofit1中使用的是RestAdapter,而Retrofit2中使用的Retrofit实例,之前的setEndpoint变为了baseUrl。...Retrofit1中同步和异步执行同一个方法需要分别定义接口。 Retrofit1对正在进行的网络任务无法取消。...其中GsonConverterFactory中的主要两个方法,主要用于解析request和response的, 在Factory中还有一个方法stringConverter,用于String的转换。...其中$appDataDir中的数据,在app卸载之后,会被系统删除。 * * 2....内部存储中的$appDataDir是安全的,只有本应用可访问 * 外部存储中的$appDataDir其他应用也可访问,但是$filesDir中的媒体文件,不会被当做媒体扫描出来,加到媒体库中。
布局 可选的布局文件:在XML中定义界面布局而不是在运行时去动态生成布局是有多个原因的,其中最重要的一个原因是这样可以使得你为不同大小的屏幕创建不同的布局文件。...例如,你可以创建创建2个版本的布局文件,告诉系统在小的屏幕上使用其中一个布局文件,在大的屏幕上使用另外一个布局文件。...External storage: 并不总是可用的,因为用户有时会通过USB存储模式挂载外部存储器,当取下挂载的这部分后,就无法对其进行访问了。...,你可以通过执行getExternalFilesDir() 来获取相应的目录,并且传递一个指示文件类型的参数。...不管你是使用 getExternalStoragePublicDirectory() 来存储可以共享的文件,还是使用 getExternalFilesDir() 来储存那些对与你的app来说是私有的文件
外部私有存储位于/storage/emulated/0/Android/data/包名这个目录下,它和内部存储一样是私有的,并且其他应用程序是无法访问的,会随着应用程序的卸载而被清除。 ...它对所有的应用程序都是可见的,前提是该应用程序有外部存储权限,而且外部公有存储中的数据不会随应用程序的卸载而被删除。 2.使用哪些api进行访问? ...Environment.getExternalStorageDirectory() Environment.getExternalStoragePublicDirectory(String type) 参数type用于指定文件夹的类型...,可以有以下取值:(getExternalFilesDir和Environment.getExternalStoragePublicDirectory这两个函数的参数type的取值是一样的) Environment.DIRECTORY_MUSIC...注:在Android10之后,不能再使用外部公有存储下的两个方法了,应用程序只能访问自己的外部私有目录,所以Android10之后尽量使用外部私有存储下的两个方法。