Android 中 Environment.getExternalStorageDirectory()无效

摘要:
我们在处理缓存的时候,并不是每次都会在应用私有存储空间那里保存,很多时候是需要用到ExternalStorage。但是到了6.0以后,就发现怎么都不无法创建文件了。很多人就疑惑,该加的权限都加了,怎么就没法创建呢?原因是Android6.0以后,google升级了Android的权限管理机制,对于一些敏感的权限,需要显性申请并被用户允许才可能运行。=300-˃"+requestCode+","+permissions+","+grantResults);}}备注:附上android的权限组,因为同一组的任何一个权限被授权了,其他权限也自动被授权。

我们在处理缓存的时候,并不是每次都会在应用私有存储空间那里保存,很多时候是需要用到ExternalStorage。我们平时一般都是用Environment.getExternalStorageDirectory(),这在6.0以前一直是好的,(即使不对,那你的问题应该是没注意加权限,或者是格式不对之类又或者sdcard被移走了等等)。但是到了6.0以后,就发现怎么都不无法创建文件了。很多人就疑惑,该加的权限都加了,怎么就没法创建呢?

原因是Android 6.0以后,google升级了Android的权限管理机制,对于一些敏感的权限,需要显性申请并被用户允许才可能运行。

private voidcheckPermission() {
        if (Build.VERSION.SDK_INT >= 23) {
            int write =checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            int read =checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
            if (write != PackageManager.PERMISSION_GRANTED || read !=PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 300);
            } else{
                String name = "CrashDirectory";
                File file1 = newFile(Environment.getExternalStorageDirectory(), name);
                if(file1.mkdirs()) {
                    Log.i("wytings", "permission -------------> " +file1.getAbsolutePath());
                } else{
                    Log.i("wytings", "permission -------------fail to make file ");
                }
            }
        } else{
            Log.i("wytings", "------------- Build.VERSION.SDK_INT < 23 ------------");
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == 300) {
            Log.i("wytings", "--------------requestCode == 300->" + requestCode + "," + permissions.length + "," +grantResults.length);
        } else{
            Log.i("wytings", "--------------requestCode != 300->" + requestCode + "," + permissions + "," +grantResults);
        }
    }

备注:附上android的权限组,因为同一组的任何一个权限被授权了,其他权限也自动被授权。例如,一旦WRITE_EXTERNAL_STORAGE被授权了,app也有READ_EXTERNAL_STORAGE.所以,你只申请一个就可以了。

android.permission-group.CALENDAR
  • android.permission.READ_CALENDAR
  • android.permission.WRITE_CALENDAR
android.permission-group.CAMERA
  • android.permission.CAMERA
android.permission-group.CONTACTS
  • android.permission.READ_CONTACTS
  • android.permission.WRITE_CONTACTS
  • android.permission.GET_ACCOUNTS
android.permission-group.LOCATION
  • android.permission.ACCESS_FINE_LOCATION
  • android.permission.ACCESS_COARSE_LOCATION
android.permission-group.MICROPHONE
  • android.permission.RECORD_AUDIO
android.permission-group.PHONE
  • android.permission.READ_PHONE_STATE
  • android.permission.CALL_PHONE
  • android.permission.READ_CALL_LOG
  • android.permission.WRITE_CALL_LOG
  • com.android.voicemail.permission.ADD_VOICEMAIL
  • android.permission.USE_SIP
  • android.permission.PROCESS_OUTGOING_CALLS
android.permission-group.SENSORS
  • android.permission.BODY_SENSORS
android.permission-group.SMS
  • android.permission.SEND_SMS
  • android.permission.RECEIVE_SMS
  • android.permission.READ_SMS
  • android.permission.RECEIVE_WAP_PUSH
  • android.permission.RECEIVE_MMS
  • android.permission.READ_CELL_BROADCASTS
android.permission-group.STORAGE
  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

免责声明:文章转载自《Android 中 Environment.getExternalStorageDirectory()无效》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ext Js简单面板及工具栏的创建使用转载:java 中对类中的属性使用set/get方法的意义和用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 5.0 以上监听网络变化

大家好,大概有一个多月没有更新博客了,我是干什么去了呢?很明显,程序员当然要加班……这一次跟大家分享一下新项目的一些心得。 监听网络变化在开发中是经常用到的,例如我们断网有一些友好的提示,或者根据不同的网络更改一些加载策略,例如wifi看视频,非wifi则会有一个提示,还有极个别更恶心的偷摸的在后台给你下各种安装包,是谁我就不一一列举了。 在5.0以前,我...

矩阵, 矩阵 , Android基础控件之ImageView

天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原创,希望各位看官冷静勿喷,能接受的赞一个,不能接受的速喷赶紧走......(转载请注明出处,没功劳也有苦劳...) 这篇介绍的是Android常用控件之Ima...

Android中的TableLayout的简单使用

Android中的TableLayout的简单使用 在Layout中加入TableLayout控件。 <TableLayout android: android:layout_width="wrap_content" android:layout_height="wrap_content" a...

检测当前运行环境——移动端与PC端。

方法1: $(function checkBrowser(){ var browser={      versions:function(){             var u = navigator.userAgent, app = navigator.appVersion; return { //移动终端浏览器版本信息                ...

让x86的android模拟器能模拟arm架构系统

2019年展月6日更新: 1、最近发现了一个能在linux下模拟arm的模拟器: xdroid,网址: https://www.linzhuotech.com/index.php/home/index/down.html, 特别好用。直接模拟arm。我的云盘里有其可执行程序。 (这个需要 5G 的根目录空间,不推荐,太大了,这个是linux上运行,不是模拟...

Android开发 TextView的开发记录

前言  此篇博客是记录一些TextView开发上一些少用的开发功能项.目前开发记录如下:   添加图片   文字滚动   添加省略号   实现长文的收起和展开功能   改变一个字符串里自定字符的颜色或者大小 效果字体(粗体/斜体/下划线)增加效果字体的方法有很多既可以在xml属性里设置,又可以在代码里设置.(这里我们除了不演示使用SpannableSt...