sdandroid权限
A. Android6.0的sd卡权限怎么搞
安卓6.0加入了更严格得权限验证,SD卡读写权限是这样得
1. 在AndroidManifest.xml添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 现在大应用一般都汇集成进去权限框架,这样在你读写SD卡得时候判断有没有权限,有的话执行,没有的话弹出添加权限对话框点击确定添加权限。
3.现在权限框架比较多有EasyPermission,PermissionGen 和 MPermissions。
4.EasyPermission修改了一个框架library,可直接使用
B. 如何编程设置android模拟器 sd卡的读写权限
android改写sd卡的权限途径:
设置DDMS(File
Explorer)目录下的sdcard目录的权限
1、打开cmd命令
2、输入adb
shell(成功后进入adb的root用户状态#)
3、你可以用
ls
命令看下当前文件夹下目录,你会发现sdcard目录在这下面
4、修改sdcard权限,因为此时sdcard是only-read的状态,
5、修改目录命令:chmod
075
(不要直接用777,不能成功执行的)
6、sdcard目录的读写权限修改完成。可在其中导入文件。
C. Android权限机制
我们知道 Android 应用程序是沙箱隔离的,每个应用都有一个只有自己具有读写权限的专用数据目录。但是如果应用要访问别人的组件或者一些设备上全局可访问的资源,这时候权限机制就能系统化地规范并强制各类应用程序的行为准则。
Android 安全性概览
在 Android 中,一个权限,本质上是一个字符串,一个可以表示执行特定操作的能力的字符串。比如说:访问 SD 卡的能力,访问通讯录的能力,启动或访问一个第三方应用中的组件的能力。 权限被授予了之后,首先会在内存和本地中有记录,这在调用系统binder服务和其他应用组件时做鉴权依据,比如调用系统binder服务时会通过Binder.getCallingUid()拿到调用者的Uid,而Uid一般都是与应用包名一一对应的,再拿这个Uid到PMS里去查这个应用对应的权限。 其次会按被授予的权限将应用分到某个组。 可以参考 https://www.jianshu.com/p/a17c8bed79d9
自定义权限的应用场景在于限制其它应用对本应用四大组件的访问。具体用法可以参考 https://www.cnblogs.com/aimqqroad-13/p/8927179.html
pm list permissions -f 命令可以详细查看 Android 所有预定义的权限。
更详细的权限信息参考 https://developer.android.com/reference/android/Manifest.permission?hl=zh-cn#WRITE_EXTERNAL_STORAGE
可以看到一个权限的信息包括:定义的包名、标签、描述、 权限组 和 保护级别 。
权限根据设备的功能或特性分为多个组。如果应用已在相同权限组中被授予另一危险权限,系统将立即授予该权限,如READ_CONTACTS和WRITE_CONTACTS。
SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 由于其特殊性,其申请方式与其它权限都不同。
其授予流程如下:
(关于 AppOpsManager 是什么可以参考: https://segmentfault.com/a/1190000009214983 )
这里简要分析下ActivityCompat#requestPermissions的流程:
更详细的权限授予流程源码分析可以参考: https://segmentfault.com/a/1190000009214983
普通权限: 清单文件中声明即可。
危险权限: 方式一: pm grant application_package android.permission.CHANGE_CONFIGURATION 方式二:appops set application_package permission_num 0/1
appops可以授予的权限参考 android.app.AppOpsManager 中的声明
系统签名权限: 方式一:将app迁移到system/priv-app目录中。 方式二:看不懂,参考 https://blog.csdn.net/abcd_3344_abcd/article/details/50698759
android 4.4 访问sd卡需要申请权限。 您的应用在 Android 4.4 上运行时无法读取外部存储空间上的共享文件,除非您的应用具有 READ_EXTERNAL_STORAGE 权限。也就是说,没有此权限,您无法再访问 () 返回的目录中的文件。但是,如果您仅需要访问 getExternalFilesDir() 提供的您的应用特有目录,那么,您不需要 READ_EXTERNAL_STORAGE `权限。
android 6.0 运行时权限。 此版本引入了一种新的权限模式,如今,用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。 对于以 Android 6.0(API 级别 23)或更高版本为目标平台的应用,请务必在运行时检查和请求权限。要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。要请求权限,请调用新增的 requestPermissions() 方法。即使您的应用并不以 Android 6.0(API 级别 23)为目标平台,您也应该在新权限模式下测试您的应用。 如需了解有关在您的应用中支持新权限模式的详情,请参阅 使用系统权限 。如需了解有关如何评估新模式对应用的影响的提示,请参阅 权限最佳做法 。
android 7.+ 应用间共享文件要使用FileProvider。 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file://URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。 要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider `类。如需了解有关权限和共享文件的详细信息,请参阅 共享文件 。
android 8.+
同一权限组的权限在被授予了之后也需要显式的再申请一次。
在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用。 对于针对 Android 8.0 的应用,此行为已被纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。 例如,假设某个应用在其清单中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 。应用请求 READ_EXTERNAL_STORAGE ,并且用户授予了该权限。如果该应用针对的是 API 级别 24 或更低级别,系统还会同时授予 WRITE_EXTERNAL_STORAGE ,因为该权限也属于同一 STORAGE 权限组并且也在清单中注册过。如果该应用针对的是 Android 8.0,则系统此时仅会授予 READ_EXTERNAL_STORAGE ;不过,如果该应用后来又请求 WRITE_EXTERNAL_STORAGE ,则系统会立即授予该权限,而不会提示用户。
android 9
隐私权限变更。
为了增强用户隐私,Android 9 引入了若干行为变更,如限制后台应用访问设备传感器、限制通过 Wi-Fi 扫描检索到的信息,以及与通话、手机状态和 Wi-Fi 扫描相关的新权限规则和权限组。
android 10
隐私权变更。
外部存储访问权限范围限定为应用文件和媒体,在后台运行时访问设备位置信息需要权限,针对从后台启动 Activity 的限制等。
android 11
隐私权限变更。
更详细的版本变更请参考 https://developer.android.com/preview/privacy?hl=zh-cn
D. Android6.0的sd卡权限怎么搞
首先手机必须获取了root权限
打开re文件管理器并找到
etc\permissions\platform.xml
这个文件
将文件的只读属性改为读写属性并用文本编辑器打开这个文件
找到
这一串字符,在下面添加
即可
添加完保存退出重启手机,第三方app就有了在sd卡上写入数据的权限了
望采纳谢谢
E. 关于Android权限申请
1、手动申请
Android6.0之后系统对权限的管理更加严格了,不但要在AndroidManifest中添加,还要在应用运行的时候动态申请。下面是动态申请SD卡读写的权限
在AndroidManifest中添加SD卡读写的权限
动态申请权限
把verifyStoragePermissions方法放在onCreate方法中即可。
2、默认申请
https://github.com/Karumi/Dexter
通过上面库,接入方式:
在build.gradle加入
然后在mainactivity加入
然后在oncreate()中加入initPermissions()就行了
以上两种方法,亲测可用。
F. Android 9.0 SD卡权限管理
Android 9.0 SD卡权限管理更为严格,
[步骤]
1.在图库中删除T卡上的图片或者视频,在文件管理中查看还存在
2.在视频应用中删除视频情况一样
[备注]重启手机后,再次进入图库重新加载进来
跟踪调试发现,是SD卡写权限被禁,用户无法对SD卡内容进行操作。
原文分析
https://blog.csdn.net/shift_wwx/article/details/85633801
修改方法:
增加-w 权限,下面第二个加上去的。
alps_p0_mp2\update\alps\system\vold\model\PublicVolume.cpp
if (!(mFusePid = fork())) {
if (getMountFlags() & MountFlags::kPrimary) {
if (execl(kFusePath, kFusePath,
"-u", "1023", // AID_MEDIA_RW
"-g", "1023", // AID_MEDIA_RW
"-U", std::to_string(getMountUserId()).c_str(),
"-w",
mRawPath.c_str(),
stableName.c_str(),
NULL)) {
PLOG(ERROR) << "Failed to exec";
}
} else {
if (execl(kFusePath, kFusePath,
"-u", "1023", // AID_MEDIA_RW
"-g", "1023", // AID_MEDIA_RW
"-U", std::to_string(getMountUserId()).c_str(),
"-w",//add by for add sdcard permission 就是这样
mRawPath.c_str(),
stableName.c_str(),
NULL)) {
PLOG(ERROR) << "Failed to exec";
}
}
这样操作之后SD卡就有了写权限,用户可以对SD卡中数据进行操作。
G. 如何在 Android 5.0 上获取 SD卡 的读写权限
1.首先请安装“Root
Explorer”这个app,它可以在已ROOT的手机中管理隐藏的系统核心档案。
2.安装完成并开启Root
Explorer以后,展开“/system/etc/permissions/”路径,然后在“platform.xml”上长按。
3.跳出“Options”选单以后,先按一下“Permissions”,我们要更改档案的权限才能写入文字。
4.此时会跳出一个警告讯息,告知你目前系统内的档案为唯读模式,需先更改为读写模式,按下“Yes”即可更改。
5.更改完成以后,将“Read”、“Write”、“Execute”项目都勾起来,然后按一下“OK”。
6.权限更改完成以后,再次在“platform.xml”上长按一次。
7.跳出“Options”选单以后,这次我们点击“Open
With”,选择用哪个app开启此档案。
8.看到显示了一堆app,我们选择用“Text
Viewer”来开启,如果读者们有其他的文字编辑app,也可以用它来开启。
9.找到以下两段文字以后,将内容改成跟底下一样:
10.更改完成以后,点击一下叫出选单,点击“Save
Changes”储存更改,然后离开即可。
11.储存成功以后,可以看到资料夹中多了一个“platform.xml.bak”档案,往后要还原时,只要将“platform.xml”删除,然后把“platform.xml.bak”更改回原来名称即可。
12.最后重新开启手机,即可让设定生效罗!
NOTE:
坊间已经有直接可以修改SD卡写入权限的app出现,但因为安全因素,我们还是自行手动修改比较安全。
H. Android 6.0 读写SD卡权限问题
Android 6.0 下默认存储SD卡,使用原生FMRadio生成的文件保存到内部存储中
【预置条件】插入T卡【操作步骤】设置>存储设备和USB>选择SD卡为默认存储>收音机录音【实际结果】收音机的录音文件未保存到T卡【预期结果】收音机的录音文件保存到T卡【复现概率】10/10
此外,SoundRecorder默认存储SD卡,生成的文件却可以保存到SD卡中
1、收音机文件没有保存到指定的SD卡目录下,因此可能是文件的路径不对。
2、进入设置中,切换默认存储位置,内部存储或者SD卡,每次切换都会修改系统中某一属性值。
3、当收音机文件保存的时候,必须要读取当前系统的默认存储路径,然后生成自己的文件路径。
STEP1、初步解决方案,但没有生效,引入新问题
对比 SoundRecorder ,根据GIT库中,之前的同事的修改记录,找到可能的解决方案,修改如下:
引入新的问题,此时,点击 Start Recording 会提示内部错误。
分析Log发现,由于权限拒绝,抛出IO异常
01-01 07:35:38.167 7467 7467 W System.err: java.io .IOException: open failed: EACCES (Permission denied)
STEP2、Android M 下SD卡读写权限问题
分析由于权限问题后,结合Android M new design,开始查找文档,寻找解决Android M 下SD卡读写权限问题
Android6.0中的运行时请求权限
后来,试了好几种方法,但都没有用,以及报问题“EACCES (Permission denied)”
STEP3、再分析可能是运行时权限问题
判断APP运行时权限如下:
发现此时,FMRadio对于的组权限如下:
com.android.fmradio Groups: 1013 3002 3003 9997 50010
com.android.soundrecorder Groups: 1015 1023 3003 9997 50105
根据 系统权限 的定义,有兴趣的同学可以去看一下这个文件 system/core/include/private/android_filesystem_config.h
分析这些Gid发现:
1015 为sdcard_rw,1023 为media_rw权限
因此,得出结论如下
1、首先修改AndroidManifest.xml文件,新增权限,确保FMRadio应用级的权限;
2、原生FMRadio使用过程中,会进行运行时的权限检查,故FMRadio运行时应该拿到了WRITE_EXTERNAL_STORAGE,以及READ_EXTERNAL_STORAGE权限,
3、但是由于FMRadio本身不具备“1015,1023”组权限,这些权限无效,仍然无法对SD卡进行读写操作。
STEP4、最终解决方案
在 STEP1 的修改基础上,在框架层,权限对应组中给予FMRadio相应的组权限,新增修改如下:
frameworks/base/data/etc/platform.xml
重编framework.jar, 将修改后的jar文件push到手机,重启
此时,再检查FMRadio对于的组权限如下:
com.android.fmradio Groups: 1013** 1015 1023** 3002 3003 9997 50010
到此为止,
I. 安卓手机外置sd卡的权限怎么打开
其实只有最后一句才是客户端手机用户利益立场所关心的,前面一大坨全都码农利益方的全都废话,和一般用户无关!但就是这一句也又是乱搬运的说法吧,早已实践证明过这个做法完全错的,这个只不过APP自身的存储位置罢了,并不是APP所操作各种文件时的权限设置,完全无关的,大家别被它误导了!他这搬运来的道听途说网上早已有过也被证明过是大错哟
J. android Q sdcard权限详解
默认情况下,如果应用以 Android Q 为目标平台,则在访问外部存储设备中的文件时会进入过滤视图。应用可以使用 Context.getExternalFilesDir() 将专用于自己的文件存储在特定于自己的目录中。
1. 临时停用分区存储行为:
2. 如何实现隔离存储:
2.1 ApplicationInfo新增PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE标记
PackageParser.java:
ApplicationInfo.java:
2.2 grantRuntimePermission()重新挂载视图
apk启动时默认挂载runtime/default视图,grantRuntimePermission()时如果是READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE,则会获取挂载模式重新挂载对应视图。
PermissionManagerService.java:
获取挂载模式这块android10有修改,没有设置Legacy标志的话,总是获取default挂载模式,没有读写权限。
android 10会设置属性[persist.sys.isolated_storage]: [true],因此走到if(ENABLE_ISOLATED_STORAGE)中的getMountMode()。
正常模式下hasLegacy=false,走到if判断的DEFAULT分支;legacy模式hasLegacy=true,与之前保持一致,有write权限就走到WRITE模式分支。
2.3 Legacy Storage属性对权限的影响
安装apk时,就会根据requestLegacyExternalStorage属性来对ops state进行设置,修改OP_LEGACY_STORAGE的默认状态。
PermissionPolicyService启动时首先进行权限变化监听:
APK安装时,会根据requestLegacyExternalStorage属性来通知storage权限变化,调用关系如下:
最终调用到PermissionPolicyService的监听函数(),进行默认权限获取和设置。
当apk安装时,声明了requestLegacyExternalStorage="true"属性,并且声明了READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE,那么addOpIfRestricted()就会将LEGACY_STORAGE设置为allow模式。
3. sdcard路径权限说明:
/mnt/runtime/default:
/mnt/runtime/read:
/mnt/runtime/write:
/sdcard/Android/data:
4. sdcard文件存储示例:
4.1 getExternalFilesDir()随卸载而删除
4.2 媒体文件
媒体文件使用MediaStore操作,卸载后不会删除。
访问其他应用生成的照片、视频、音频,需要READ_EXTERNAL_STORAGE权限。
4.3 存储访问框架(SAF)
访问其他应用创建的文件,例如"Download"目录,必须使用存储访问框架,用户通过框架选择特定文件。
4.4 照片中的位置信息
需要ACCESS_MEDIA_LOCATION权限,才能获取元数据中的位置信息。