Я сошел с ума от этого:
Log.d("STATE", Environment.getExternalStorageState());
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "work_data");
Log.d("PATH", f.getAbsolutePath());
if (!f.exists()) {
Log.d("MAKE DIR", f.mkdirs() + "");
}
Выходной журнал выглядит так:
STATE mounted
PATH /mnt/sdcard/DCIM/work_data
MAKE DIR false
Я убедился, что добавил правильное разрешение:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Но я не знаю почему он не может создать папку. Я также использовал mkdir ()
шаг за шагом, но результат тот же. Пожалуйста, помогите мне. Я так много гуглил и потратил как минимум 2 дня на эту глупость. Спасибо за вашу помощь !!
РЕДАКТИРОВАНИЕ:
Извините! Я добавил
в
тег. Это была моя ошибка! Но спасибо всем за ответ.
Для новых устройств необходимо спросить полномочия пользователя.
можно сделать это как это, прежде чем создадут файл:
boolean hasPermission = (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
//ask permission
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
}
else {
//you have permission, create your file
}
После действия пользователя, можно обработать результат.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case 1: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//you have permission, create your file
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(MainActivity.this, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}
}