##android各版本权限与存储

权限问题:

Android6(API 23)2015年之前       AndroidManifest.xml标注即可。在安装程序时可以看到程序所需权限,完全接受,程序可以获取清单文件标注的权限,拒绝则程序安装不成功。

Android 6-10   动态申请权限(AndroidManifest.xml中同样也需要标注权限)

所以,开发应用程序基本就动态申请就对了,反正也兼容低版本。

存储问题:

首先介绍一下计算机中的内存与外存,内存(RAMRandom Access Memory,ROM)和外存(存储器,硬盘、固态硬盘(SSD)、SDU盘,光盘)

        内存与外存的区别:

内存、RAM、ROM、Cache的关系_rom、ram是内存吗_gloryor的博客-CSDN博客

Android系统存储数据的变化:

1.Android 1.x-2.x:较早的Android版本使用的是基于FlashYAFFSYet Another Flash File System)文件系统来管理内部存储。这些版本中的应用程序数据存储在设备的内部闪存(ROM)上,并且没有提供直接访问的公共存储目录。

2.Android 3.x-4.4:从Android 3.0开始,Google引入了基于Linux文件系统的扩展文件系统(Ext4)作为内部存储的首选文件系统。这些版本中引入了外部存储的概念,即SD卡。应用程序可以将数据存储在内部存储(ROM)或可移动的SD卡上。

  1. 内部存储:应用程序的私有数据存储在内部存储中,并且只有该应用程序本身可以访问这些数据。这些数据通常存储在/data/data/<package_name>/目录下
  2. 外部存储:应用程序可以将公共数据存储在外部存储中,例如图片、音频、视频等。这些数据存储在SD上,并且可以通过相应的API进行访问。

***getFilesDir()data/….     内部存储空间(ROM)中应用程序私有的内部存储空间路径,只能被本应用程序访问,无需获取读写权限

例子:

android中写入文件例子-CSDN博客

Environment.getExternalStorageDirectory()   /storage/emulated/0/DCIM      获取外部存储空间(SD卡)路径(共享目录路径)需要获取读写权限。
如果并没有插入外部存储卡,这个方法获取到的同样也是内部存储的路径(不过不是data/..那个路径),可以理解为一个内部存储空间虚拟的SD卡

3.Android 4.4-9.0:从Android 4.4开始,Google引入了存储框架(Storage Framework),并推出了"Storage Access Framework"(SAF)来改善外部存储的访问方式。

SAF提供了标准化的API,使应用程序可以与用户设备上的各种存储提供者进行交互,包括内部存储和可移动的SD卡。这样,应用程序可以通过统一的接口来读取和写入各种存储位置的文件。      ****使用 SAF 提供的文件选择器和 DocumentProvider API6.0之前不用动态。6.0后动态申请权限(这里指的是敏感权限))

此外,Android 4.4引入了应用程序私有目录(App-specific directories),使应用程序可以在外部存储中创建自己的私有目录,而不需要获取其他特定权限。

4.Android 10及以上:从Android 10开始,Google进一步加强了对外部存储的访问限制。默认情况下,应用程序只能访问其私有目录和公共存储目录(例如Music/、Pictures/等),对于其他外部存储中的文件,应用程序需要请求特定的权限。

Scoped Storage(作用域存储)是Android 10引入的新特性,它更加严格控制了应用程序对外部存储的访问权限。每个应用程序都有自己的私有目录,无法直接访问其他应用程序的文件。应用程序只能通过声明适当的权限或使用SAF来访问其他文件。

详细的博客见:真的太长了,大概看了下,以后用到再看吧。

Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)_data/user/0/ usb-CSDN博客

总结:6.0后动态权限(敏感的权限需动态),存储的话,内部存储/外部存储都需要统一的DocumentProvider API,并且能在外部存储创建私有目录,应用程序只能访问其私有目录和公共存储目录。

存储容量:

内部存储路径:内部存储空间通常较小,主要用于存储应用程序的私有数据,如 SharedPreferences 文件、数据库文件等。Android 系统会自动管理内部存储空间。

外部存储路径:外部存储空间通常较大,可以存储更大量的文件和数据。外部存储空间可以用于存储用户的文件、多媒体内容等。需要注意的是,外部存储空间的可用容量可能受到设备存储限制或其他应用程序的占用。

根据实际需求,你可以选择使用内部存储路径或外部存储路径来存储文件。如果文件需要私密性或只供当前应用程序使用,则可以选择内部存储路径。如果文件需要被其他应用程序或用户访问,或者需要存储大量文件或数据,则可以选择外部存储路径。   需要权限,还要注意存储位置!!

参考:

https://zhuanlan.zhihu.com/p/141903185

https://blog.csdn.net/weixin_41939525/article/details/113370957

Android 10API 级别 29)开始,Android 引入了一些关于访问外部存储的变更,这可能导致在真机上使用 Environment.getExternalStoragePublicDirectory() 方法无法正常工作。

Android 10 及更高版本中,Environment.getExternalStoragePublicDirectory() 方法被标记为弃用,并且不再访问应用的外部存储空间。相反,它返回的是一个应用私有目录的路径,而非共享存储空间中的公共目录。

为了支持对外部共享存储空间的访问,Android 引入了新的存储访问框架,即 Storage Access FrameworkSAF)和 MediaStore API。这些框架提供了更安全、更灵活的方式来管理外部存储访问权限和文件操作。

如果你需要在真机上访问共享存储空间中的特定目录(例如 Movies 目录),你可以考虑使用以下方法之一:

  1. 使用 Intent  ACTION_OPEN_DOCUMENT_TREE 启动 SAF,允许用户选择共享存储目录,并获取访问权限。
  2. 使用 MediaStore API 来访问特定类型的媒体文件,例如影片、音频或图像。

请注意,无论使用哪种方法,你仍然需要请求适当的权限,并与用户进行交互以获取所需的访问权限。

总结起来,如需在真机上访问外部共享存储空间,传统的 Environment.getExternalStoragePublicDirectory() 方法已不再适用。应使用新的存储访问框架(如 SAF MediaStore API)来管理访问权限和文件操作。


敏感权限:

在 Android 系统中,许多应用程序需要获取系统权限才能完成某些操作。比如,访问用户的联系人、获取设备的位置信息、使用相机等。获取权限的主要目的是确保应用程序只能在经过用户授权的情况下,才能访问敏感信息或执行敏感操作,以保护用户的隐私和安全。

通常情况下,只有具有特定权限的应用程序才能执行以下操作:

访问敏感数据:例如用户的联系人、短信、电话记录等

执行系统级别的操作:例如在后台运行、启动服务、开机自启

控制硬件设备:例如使用相机、录音、定位等

更改系统设置:例如更改屏幕亮度、打开蓝牙、激活谷歌地图等

当应用程序需要访问受保护的资源时,Android 系统会弹出一个对话框,询问用户是否授予应用程序所请求的权限。用户可以选择授予或拒绝权限。如果用户拒绝了权限请求,应用程序可能无法正常工作。

需要注意的是,在 Android 6.0 及以上版本中,系统引入了运行时权限(Runtime Permission)机制。这个机制要求应用程序在运行时请求需要的权限,并且用户可以在任何时候撤销权限。这使用户可以更好地控制应用程序访问敏感信息和执行敏感操作的方式。

总之,Android 应用程序需要获取系统权限来执行敏感操作并访问受保护的资源,以保护用户的隐私和安全。在请求权限时,应用程序应该清楚地说明所需的权限,并尽可能遵循最佳实践,以确保用户信任和满意。


日志:Log

1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");

2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.

3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息

4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。

5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。

级别越来越高,设置高级别就不输出低级别的日志了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值