-
sd卡权限
2016-05-12 10:22:20<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<protected-broadcast android:name="android.intent.action.MEDIA_MOUNTED" /> -
androidQ sd卡权限使用详解
2020-08-19 00:42:18主要介绍了androidQ sd卡权限使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
Android添加sd卡权限
2020-05-16 20:09:24Android添加sd卡权限 1.在AndroidManifest.xml中添加 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_...Android添加sd卡权限
1.在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.再在想引用的地方添加verifyPermission函数
public void verifyPermission(Context context) { int permission = ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions( MainActivity.this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); } }
3.在onCreate函数中添加
verifyPermission(MainActivity.this)
-
Android 6.0 读写SD卡权限问题
2016-11-18 22:00:00Android 6.0 读写SD卡权限问题, 运行时权限检查 Android M SD卡读写权限一、问题描述
Android 6.0 下默认存储SD卡,使用原生FMRadio生成的文件保存到内部存储中
【预置条件】插入T卡
【操作步骤】设置>存储设备和USB>选择SD卡为默认存储>收音机录音
【实际结果】收音机的录音文件未保存到T卡
【预期结果】收音机的录音文件保存到T卡
【复现概率】10/10
此外,SoundRecorder默认存储SD卡,生成的文件却可以保存到SD卡中二、问题分析
1、收音机文件没有保存到指定的SD卡目录下,因此可能是文件的路径不对。
2、进入设置中,切换默认存储位置,内部存储或者SD卡,每次切换都会修改系统中某一属性值。
3、当收音机文件保存的时候,必须要读取当前系统的默认存储路径,然后生成自己的文件路径。三、解决方案
STEP1、初步解决方案,但没有生效,引入新问题
对比SoundRecorder,根据GIT库中,之前的同事的修改记录,找到可能的解决方案,修改如下:
1) 修改了packages/apps/FMRadio/AndroidManifest.xml文件添加
2) 修改packages/apps/FMRadio/src/com/android/fmradio/FmRecorder.java文件
添加import com.mediatek.storage.StorageManagerEx;语句
替换startRecording函数String recordingSdcard = FmUtils.getDefaultStoragePath();为String recordingSdcard = StorageManagerEx.getDefaultPath();
引入新的问题,此时,点击 Start Recording 会提示内部错误。分析Log发现,由于权限拒绝,抛出IO异常
01-01 07:35:38.167 7467 7467 W System.err: java.io.IOException: open failed: EACCES (Permission denied)STEP2、Android6.0中的运行时请求权限
分析由于权限问题后,结合Android M new design,开始查找文档,寻找解决Android M 下SD卡读写权限问题
Android6.0中的运行时请求权限
后来,试了好几种方法,但都没有用,以及报问题“EACCES (Permission denied)”STEP3、再分析可能是运行时权限问题
判断APP运行时权限如下:
- adb remount;//挂载
- adb shell;//进入shell
- ps | grep fmradio;//查找FMRadio的PID,前提是手机打开FMRadio,插入耳机
- cd proc/4830;//进入PID对应的信息文件中
- cat status;//查看进程信息发现此时,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<---add XXX begin --> <permission name="android.permission.WRITE_EXTERNAL_STORAGE" > <group gid="sdcard_rw" /> <group gid="media_rw" /> </permission> <---add XXX end -->
重编framework.jar, 将修改后的jar文件push到手机,重启
此时,再检查FMRadio对于的组权限如下:
com.android.fmradio Groups: 1013 1015 1023 3002 3003 9997 50010到此为止,
- 修改重编framework.jar,
- 修改重编FMRadio.apk,再清除数据
- 以上push到手机,
重启验证,可以保存到SD卡
STEP5、最简单的方法—-push之后重启手机
1、修改了packages/apps/FMRadio/AndroidManifest.xml文件添加
2、修改packages/apps/FMRadio/src/com/android/fmradio/FmRecorder.java文件
添加import com.mediatek.storage.StorageManagerEx;语句
替换startRecording函数String recordingSdcard = FmUtils.getDefaultStoragePath();为String recordingSdcard = StorageManagerEx.getDefaultPath();其实之前的方法是正确的,push修改后的FMRadio之后,重启一下手机即可。
当时没有生效的原因是,从L版本开始,apk直接push就不生效了,要push+重启才可以,因为PMS取消了各个路径下的observer,直接push不会生效,重启才会重新扫描。这里向大家主要提到两个文件
1、电脑代码区文件:frameworks/base/data/etc/platform.xml
这个文件中定义了底层权限组GID和高层权限名字之间的对应关系
其实,在这个文件已经定义过了<permission name="android.permission.WRITE_MEDIA_STORAGE" > <group gid="media_rw" /> <group gid="sdcard_rw" /> </permission>
故我们只需要在AndroidManifest.xml,添加即可grant FMRadio SD卡读写权限。
2、手机数据区文件:data/system/packages.xml
这个文件由PackageManagerService.Java生成,里面记录了系统当中安装的APK的所有属性,权限等信息。L之前,当系统中的APK安装、删除、升级时,文件就会被更新。L之后,重启才会重新扫描更新该文件。push后,重启前
<package name="com.android.fmradio" codePath="/system/priv-app/FMRadio" nativeLibraryPath="/system/priv-app/FMRadio/lib" primaryCpuAbi="arm64-v8a" publicFlags="940097093" privateFlags="8" pkgFlagsEx="0" ft="151fd3402d8" it="158575d1d70" ut="151fd3402d8" version="2" userId="10010"> <sigs count="1"> <cert index="0" key=“……” /> </sigs> <perms> <item name="android.permission.MODIFY_AUDIO_SETTINGS" granted="true" flags="0" /> <item name="android.permission.MODIFY_AUDIO_ROUTING" granted="true" flags="0" /> <item name="android.permission.ACCESS_MOCK_LOCATION" granted="true" flags="0" /> <item name="android.permission.ACCESS_FM_RADIO" granted="true" flags="0" /> <item name="android.permission.BLUETOOTH" granted="true" flags="0" /> <item name="android.permission.INTERNET" granted="true" flags="0" /> <item name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" granted="true" flags="0" /> <item name="android.permission.INTERACT_ACROSS_USERS" granted="true" flags="0" /> <item name="android.permission.WAKE_LOCK" granted="true" flags="0" /> </perms> <proper-signing-keyset identifier="1" /> </package>
重启后
<package name="com.android.fmradio" codePath="/system/priv-app/FMRadio" nativeLibraryPath="/system/priv-app/FMRadio/lib" primaryCpuAbi="arm64-v8a" publicFlags="940097093" privateFlags="8" pkgFlagsEx="0" ft="151fda9d6e8" it="158575d1d70" ut="151fda9d6e8" version="2" userId="10010"> <sigs count="1"> <cert index="0" key="……" /> </sigs> <perms> <item name="android.permission.MODIFY_AUDIO_SETTINGS" granted="true" flags="0" /> <item name="android.permission.MODIFY_AUDIO_ROUTING" granted="true" flags="0" /> <item name="android.permission.ACCESS_MOCK_LOCATION" granted="true" flags="0" /> <item name="android.permission.ACCESS_FM_RADIO" granted="true" flags="0" /> <item name="android.permission.BLUETOOTH" granted="true" flags="0" /> <item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />** <item name="android.permission.INTERNET" granted="true" flags="0" /> <item name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" granted="true" flags="0" /> <item name="android.permission.INTERACT_ACROSS_USERS" granted="true" flags="0" /> <item name="android.permission.WAKE_LOCK" granted="true" flags="0" /> </perms> <proper-signing-keyset identifier="1" /> </package>
未完待续……
-
快速解决安卓7.0系统写入SD卡权限失败的问题
2020-08-27 03:13:38今天小编就为大家分享一篇快速解决安卓7.0系统写入SD卡权限失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
flutter 获取手机的权限---SD卡权限
2020-02-02 20:53:19flutter是跨平台的移动技术,当然也摆脱不了设备的授权问题,如android 设备中清单文件里的各种权限配置,以及到Android 6.0 的动态权限配置,...找到Android模块的清单文件,配置对应的sd卡权限。 <uses-permi...flutter是跨平台的移动技术,当然也摆脱不了设备的授权问题,如android 设备中清单文件里的各种权限配置,以及到Android 6.0 的动态权限配置,Flutter也有相对应的功能要处理。接下来基于Android系统读写SD的权限做一个简单的讲解。(相关IOS的权限请自行查阅)
1.清单文件配置权限
找到Android模块的清单文件,配置对应的sd卡权限。<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.配置动态权限,现在Android手机设备几乎全都是6.0以上的系统,所以免不了要配置动态权限。在flutter中,我们使用permission_handler: ^3.2.0 插件给大家演示效果。动态权限也分为几个部分;
- 检查当前应用是否已经拥有了相关权限
/** * 检查是否有相关权限 */ void checkPermissionStatus() { final Future<PermissionStatus> statusFuture = PermissionHandler().checkPermissionStatus(PermissionGroup.storage); statusFuture.then((PermissionStatus status) { setState(() { _permissionStatus = status; }); }); }
- 根据检查权限的结果,决定是否要请求权限的授权,也就是请求权限授权
/** * 请求系统权限,让用户确认授权 */ Future requestPermission() async { List<PermissionGroup> permissions = <PermissionGroup>[ PermissionGroup.storage ]; Map<PermissionGroup, PermissionStatus> permissionMap = await PermissionHandler().requestPermissions(permissions); setState(() { _permissionStatus = permissionMap[PermissionGroup.storage]; }); }
- 根据权限的结果,执行相关逻辑
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("检查读写SD卡权限"), ), body: Column( children: <Widget>[ RaisedButton( child: Text("检查是否拥有权限--读写外部卡"), onPressed: checkPermissionStatus, ), Text( "检查权限结果:" + hasPermissionText(_permissionStatus), ), RaisedButton( child: Text("请求权限"), onPressed: requestPermission, ), Text( "获取权限结果:" + getPermissionResult(_permissionStatus), ) ], ), ); }
-
android 读取sd卡权限的问题
2020-08-22 14:53:29Android读写sd卡权限问题动态添加权限:”https://www.jianshu.com/p/d349047e6515 添加权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission ... -
如何优雅的申请sd卡权限
2019-09-20 20:14:23在上一篇文章安卓如何申请sd卡权限并写入文件已经解决了向sd卡里面写入文件的问题了,解决办法需要startActivity,然后在onActivityResult方法里面去监听是否授权成功,这种方法对当前Activity的侵入性太强了,如何... -
Android 10 中读写SD卡权限的问题
2020-04-24 21:57:24记一次在android的学习中遇到的SD卡权限问题。最开始题主本来是想做一个小的demo来操作SD卡。如图所示: 没想到在开发的过程中遇到了权限问题。 首先贴一下activity的代码。其实就是三个按钮,绑定三个事件。 ... -
Android 9.0如何读取外置SD卡权限?
2019-01-07 15:04:05现在android 9.0是如何读取外置SD卡权限的?我试过动态和静态申请都不行,在线等,急急急~ 听别人说用DocumentUI,这个怎样用,网上搜到的方法很少~ -
Android6 0 读写SD卡权限动态申请
2018-11-11 07:59:31Android6 0 读写SD卡权限动态申请 -
关闭读写SD卡权限后的应用适配问题
2018-08-28 20:26:00之前公司的应用是在MainActivity中申请读写SD卡权限,如果用户选择了拒绝,那么直接弹窗提示用户必须赋予SD卡读写权限,否则将直接退出应用。虽然微信等app都是这样的逻辑,但是还是觉得很不友好。在如今这个Android... -
获取SD卡权限
2019-03-09 02:30:52一、解析 做项目遇到了一个棘手的问题,SD卡的读写权限问题。 1.android版本在6.0以上版本时,以下代码才有用: if (Build.VERSION.SDK_INT >= 23) { UiUtils.getInstance().showToast(“1”); //... -
SD 卡权限动态申请
2019-07-29 10:37:06Android6.0之后系统对权限的管理更加严格了,...下面是动态申请SD卡读写的权限 在AndroidManifest中添加SD卡读写的权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... -
android SD卡权限问题
2018-11-21 10:32:44要写个文件管理器 向SD卡写数据 现在我网上找了找 只有一个可行的办法 就是先要打开一个Activity 大概意识是 用这个Activity可以给SD卡等路径授权 new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);就这个 我想问 ... -
设置读取SD卡权限的问题
2015-08-04 16:06:09在极客学院的Android项目实战中,有个记事本项目,由于视频中没有讲到在哪里加应用的读取SD卡权限问题,导致拍摄的照片和视频都无法存到SD卡中,在网上到处查之后,终于解决了。 在Android的Manifest文件中: xml ... -
android SD卡权限
2016-09-08 13:28:16在操作SD卡时添加了 <!-- 在文件写入权限 --> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUN -
android 获取SD 卡权限
2019-12-02 11:10:51Java层获取权限: void GetExternalStoragePermission() { if(!CheckExternalStoragePermission()) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission... -
安卓如何申请sd卡权限并写入文件
2019-09-20 19:33:22最近项目有需求,需要向sd卡写入文件,在网上找了一大堆文章,很多文章都是吧Internal Storage当成了sd卡,到最后解决办法都变成了如何动态申请权限了。 在此记录一下我的解决办法,在安卓4.4之后,使用android.... -
Android获得SD卡权限
2018-05-30 22:10:08加两行代码在MainActivity.xml中 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_... -
android 写SD卡权限
2017-05-03 09:58:49增加一个权限,变成系统APP android:sharedUserId="android.uid.system” -
外置存储权限在哪打开_安卓手机外置sd卡权限怎么打开
2020-12-19 20:57:31展开全部在2.x的版本中,在manifest中配置的权限e68a843231313335323631343130323136353331333365643662android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有... -
android写sd卡权限
2013-03-27 15:27:13在开发andriod程序,写sd卡的时候,出现IOException:permission denied, 而且已经设置好了,且设置了sd卡。 还是错误,可以重新建一个工程,只写write操作。可以尝试重新发布apk。 -
Android7.0适配SD卡权限
2019-09-17 16:41:31之前APP中有一个功能,版本更新下载新的APK文件之后,直接打开系统的安装页面。原来的代码如下: private void install(File apkFile) { Uri uri = Uri.fromFile(apkFile); Intent local...
-
Cocos Creator游戏开发-连连看 (接入腾讯优量汇广告)
-
javaSpring5 保姆式教程+傻瓜式笔记+附送Junit4的idear版教程.rar(本教程附带Spring所有需要的jar包+Junit的4.1.2j
-
2021-01-21
-
复习_2: Find the toppest 1
-
Soul源码总结-01-20
-
Laya 2.0 开发3D小游戏 入门教学
-
微服务系列第七十一季-Spring入门
-
阿里云云计算ACP考试必备教程
-
在指定的窗口输入文本-要加载精易模块.e
-
【2021】UI自动化测试Selenium3
-
转行做IT-第1章 计算机基础
-
页码的制作
-
傲梅轻松备份AOMEI_Backupper_v6.3.rar
-
python办公自动化技巧
-
KDDCUP99.zip
-
**记录PAT进度**
-
JavaEE框架(Maven+SSM)全程实战开发教程(源码+讲义)
-
信息学奥赛一本通 1985:【19CSPJ普及组】加工零件
-
three.js入门速成
-
8、信息学奥赛系列课程之NOI LINUX课程表01.pdf