在编写未捕获异常导致程序崩溃的demo中,需要将未捕获异常生成文本并导出到SD卡,此时发现demo里面的生成文本文件或文件夹(一级或多级)均无法生成的现象。
已经在AndroidManifest.xml里面添加对SD卡进行读写的操作,并在MainActivity做了动态申请。
//动态申请权限
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };//需要申请的权限
int permission = ActivityCompat.checkSelfPermission(this,"android.permission.WRITE_EXTERNAL_STORAGE");
if(permission != PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this,PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
//文件夹生成(多级)
File dir = new File(PATH);
if(!dir.exists()) {
dir.mkdir();
LogUtils.logE("mkdir crash paht = " + PATH);
}
//目标文本
File file = new File(PATH + FILE_NAME + time + FILE_NAME_SUFFIX);
//AndroidManifest添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />正常情况下,会在 /storage/emulated/0/的目录下生成PATH的文件夹,可当我想查看文件内容的时候,发现目录下并没有生成指定的文件夹,更别说需要的目标文本文件了。
解决办法:
1.确认已经添加访问权限,并在高版本(Android6.0)做了权限的动态申请。
1.1 将dir.mkdir() 改为 dir.mkdirs();
1.2 将PATH里面文件夹的名字改成小写;
1.3 当文件夹生成,而文本没有生成,可以使用file.createNewFile();
2.如果以上方法无法解决,有可能是AndroidX更新了文件夹生成读写机制,不允许在根目录下创建路径,防止程序随意创建文件夹,限定了固定的名字命名文件夹。这种情况下,可以将targetSdkVersion和compileSdkVersion改为更低版本。
版权声明:本文为qq_29933359原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。