I am trying to write a file on external storage, this code was working fine 3 weeks ago, but from last 4 days it stopped working, i dont know whats wrong with it.
following is my code.
File exportDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "XXX");
// log(exportDir.exists() + " ?????");
// log(exportDir.mkdirs() + " ?????");
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File file_path = new File(exportDir, "backuptask.db");
try {
file_path.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream fos = new FileOutputStream(file_path.toString());
fos.write(array.toString().getBytes());
fos.close();
and following permissions set in the Manifest.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
i have already asked for run-time permissions, and this code works fine for API >= 19, but throws following error in API < 19.
/mnt/sdcard/XXX/backuptask.db: open failed: EACCES (Permission denied) 11-13 17:20:47.776 4127-4158/com.XXX.XXX W/System.err: java.io.FileNotFoundException: /mnt/sdcard/XXX/backuptask.db: open failed: EACCES (Permission denied) 11-13 17:20:47.786 4127-4158/com.XXX.XXX W/System.err: at libcore.io.IoBridge.open(IoBridge.java:416) at java.io.FileOutputStream.(FileOutputStream.java:88) at com.Tasks.exportimporttasks.TaskBackup.startBackup(TaskBackup.java:133) at com.Tasks.demoimportexport.RestoreBackup$ExportDatabaseTask.doInBackground(RestoreBackup.java:272) at com.Tasks.demoimportexport.RestoreBackup$ExportDatabaseTask.doInBackground(RestoreBackup.java:259) at android.os.AsyncTask$2.call(AsyncTask.java:287) at java.util.concurrent.FutureTask.run(FutureTask.java:234) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:856) Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied) at libcore.io.Posix.open(Native Method) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) at libcore.io.IoBridge.open(IoBridge.java:400) ... 10 more