【发布时间】:2018-09-27 14:11:33
【问题描述】:
似乎每当我使用 MkDirs 或自行保存文件(不创建目录)时,它都会失败。该应用程序确实具有写入和读取存储的权限,因为这是在主活动中检查的,如果未授予权限,活动甚至不会启动。我在 Pixel 2 XL 上的 Android 8.1.0 上运行它。使用 DIRECTORY_DOWNLOADS 和其他类似的方法也不起作用。感觉像是权限或其他存储问题,但我不太确定。
public void onInput(MaterialDialog dialog, CharSequence input) {
inputNormal = textContent.getText().toString();
File rootFolder = new File(Environment.getExternalStorageDirectory().toString(), "Sorbet");
if (!rootFolder.exists()) {
rootFolder.mkdirs();
}
try {
File file = new File(rootFolder, input.toString()+".txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
writer.write(inputNormal);
writer.newLine();
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
对于上下文,这是我用来检查权限的代码。这是完全有效的,因为对话框显示授予权限,并且权限显示为在应用程序的系统设置中授予。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE);
if (permissionCheck == PackageManager.PERMISSION_DENIED) {
Snackbar errorBar = Snackbar.make(findViewById(R.id.content_main), getString(R.string.snackbar_error),
Snackbar.LENGTH_LONG)
.setAction(getString(R.string.allow_access), new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
STORAGE_PERMISSION_RC);
}
});
errorBar.show();
}
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
startActivity(NoteCreateIntent);
}
}
});
}
else{
fab.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startActivity(NoteCreateIntent);
}
});
}
【问题讨论】:
-
请发布您遇到的确切错误。
-
@bremen_matt 没有错误。 LogCat 中什么都没有,没有崩溃,什么都没有。该目录只是没有被创建。奇怪的是,它曾经可以在我的 Pixel 1 上运行,但不再在我的 Pixel 2 XL、我的任何模拟器或我测试过的任何其他设备上运行
-
rootFolder.mkdirs();。检查返回值并进行相应处理:if(!rootFolder.mkdirs()){Toast ( ... could not create directory ....); return;}.; -
Environment.getExternalStorageDirectory().toString()那应该只是Environment.getExternalStorageDirectory()。 -
权限?您是否要求写入外部存储?写?