Я создаю файл в external storage
и добавляю значения к этому файлу, проблема в том, что, хотя я добавил необходимые разрешения, во время выполнения я получаю ниже зарегистрированных ошибок журнала.Не удается создать файл
также когда я подключить устройство "Asus nexus 7"
к USB, я не могу видеть любое содержимое на устройстве, я имею в виду, что устройство подключено, но я не могу просматривать любые файлы в устройстве.
Примечание:
the same code creates the files normally when Samsung Galaxy note is
connected, but when i connect Asus Nexus7 i receive the below errors plus
the storage of the device cant be seen when connected.
код:
12-04 10:44:43.213 4551-4551/com.example.com.myapplication W/IOCtrl: +++++ createFile() +++++
12-04 10:44:43.213 4551-4551/com.example.com.myapplication W/IOCtrl: +++++ isExternalStorageMounted() +++++
12-04 10:44:43.218 4551-4551/com.example.com.myapplication D/IOCtrl: isExternalStorageMounted(): -> media state: mounted
12-04 10:44:43.218 4551-4551/com.example.com.myapplication D/IOCtrl: dir: /storage/emulated/0/CAN_BUS already exists
12-04 10:44:43.218 4551-4551/com.example.com.myapplication D/IOCtrl: file: log0.txt will be created
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: java.io.IOException: open failed: EACCES (Permission denied)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at java.io.File.createNewFile(File.java:939)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at com.example.com.myapplication.IOCtrl.createFile(IOCtrl.java:86)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at com.example.com.myapplication.MainActivity$1.onClick(MainActivity.java:66)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at android.view.View.performClick(View.java:5198)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at android.view.View$PerformClick.run(View.java:21147)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at android.os.Looper.loop(Looper.java:148)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-04 10:44:43.219 4551-4551/com.example.com.myapplication W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
12-04 10:44:43.220 4551-4551/com.example.com.myapplication W/System.err: at libcore.io.Posix.open(Native Method)
12-04 10:44:43.220 4551-4551/com.example.com.myapplication W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
12-04 10:44:43.220 4551-4551/com.example.com.myapplication W/System.err: at java.io.File.createNewFile(File.java:932)
12-04 10:44:43.220 4551-4551/com.example.com.myapplication W/System.err: ... 11 more
12-04 10:44:43.220 4551-4551/com.example.com.myapplication E/IOCtrl: <<createFile>>: Error creating file: open failed: EACCES (Permission denied)
Update :: Код:
//how the file is being created
public class IOCtrl {
private final static String TAG = IOCtrl.class.getSimpleName();
private static final String COMMA = ",";
private static final String NAN = "NAN";
private static final String NOLOC = "NO_LOC";
private static final String NEW_LINE = System.lineSeparator();
private final static String DIR_NAME = "CAN_BUS";
private final static String ROOT_DIR = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
private static boolean isExternalStorageMounted() {
Log.w(TAG, CSubTag.msg("isExternalStorageMounted"));
String state = Environment.getExternalStorageState();
boolean mediaAvailable = false;
Log.d(TAG, CSubTag.msg("isExternalStorageMounted", "media state: " + state));
switch (state) {
case Environment.MEDIA_MOUNTED:
state = Environment.MEDIA_MOUNTED;
mediaAvailable = true;
break;
case Environment.MEDIA_MOUNTED_READ_ONLY:
state = Environment.MEDIA_MOUNTED_READ_ONLY;
mediaAvailable = true;
break;
default:
mediaAvailable = false;
break;
}
return mediaAvailable;
}
public static File createFile(String fileName) {
Log.w(TAG, CSubTag.msg("createFile"));
String state;
if (IOCtrl.isExternalStorageMounted()) {
//Log.v(TAG, CSubTag.subBullet("createFile", "MEDIA_MOUNTED_READ_ONLY"));
File dir = new File(IOCtrl.ROOT_DIR + File.separator + IOCtrl.DIR_NAME);
boolean dirCreated = dir.mkdirs();
if (dirCreated) {
Log.d(TAG, "dir: " + dir.getAbsolutePath() + " created");
} else {
Log.d(TAG, "dir: " + dir.getAbsolutePath() + " already exists");
}
File file = new File(dir, fileName);
boolean fileExists = file.exists();
if (fileExists) {
Log.d(TAG, "file: " + fileName + " already exists");
} else {
Log.d(TAG, "file: " + fileName + " will be created");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, CSubTag.subBullet("createFile", "Error creating file: " + e.getMessage()));
return null;
}
}
return file;
} else {
Log.e(TAG, CSubTag.msg("createFile", "media storage is not available"));
return null;
}
}
}
Не могли бы вы предоставить код вашего манифеста и способ создания файлов, например. путь? Каков целевой SDK - Android 6? Разум есть что-то особенное в отношении разрешений. Ошибка говорит о том, что ваше разрешение неверно, поэтому я бы предположил, что вы пишете неверный путь или не имеете правильных разрешений манифеста. – Anthea
Попробуйте создать минимальный пример, создающий ошибку и разместив его здесь. – Trilarion
@Trilarion, пожалуйста, ознакомьтесь с разделом обновления с кодом – user2121