2015-12-04 2 views
2

Я создаю файл в 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; 
    } 

} 
} 
+1

Не могли бы вы предоставить код вашего манифеста и способ создания файлов, например. путь? Каков целевой SDK - Android 6? Разум есть что-то особенное в отношении разрешений. Ошибка говорит о том, что ваше разрешение неверно, поэтому я бы предположил, что вы пишете неверный путь или не имеете правильных разрешений манифеста. – Anthea

+0

Попробуйте создать минимальный пример, создающий ошибку и разместив его здесь. – Trilarion

+0

@Trilarion, пожалуйста, ознакомьтесь с разделом обновления с кодом – user2121

ответ

0
> open failed: EACCES (Permission denied) 
you can only write on public folder. try to store your file on Download folder 

File file; file=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
+0

, пожалуйста, см. Примечание по обновлению выше – user2121

0

использовать разрешение в манифесте в нужном месте.

<application> 
     ... 

    </application> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
</manifest> 
+0

. Он находится в нужном месте – user2121

+0

да, вы должны определить свое разрешение. Indie манифест тега не в теге приложения. –

+0

Я имел в виду, я определил разрешение в правом ладони и я использую правильное разрешение, так как я указал его .. но проблема по-прежнему сохраняется – user2121

Смежные вопросы