Hallo Java-Forum,
in meiner Android-App verwende ich folgenden Code um eine Datei auf der SD-Karte des Smartphones abzuspeichern:
"savePath" ist /storage/extSdCard/freeButtons/
Beim benutzen dieser methode wird ein Fehler ausgeworfen:
So wie es aussieht, hat die App keinen Zugriff auf den Ordner/keine Permissions.
sind hinzugefügt und auslesen einer Datei im Ordner funktioniert auch.
Wie könnte man den Fehler(erfolgreich) umgehen?
JavaWolf
in meiner Android-App verwende ich folgenden Code um eine Datei auf der SD-Karte des Smartphones abzuspeichern:
Code:
public void download(final String url, final String savePath, final String saveName) {
new Thread(new Runnable() {
public void run() {
try {
URL sourceUrl = new URL(url);
URLConnection conn = sourceUrl.openConnection();
conn.connect();
InputStream inputStream = conn.getInputStream();
int fileSize = conn.getContentLength();
File savefile = new File(savePath, saveName);
if (savefile.exists()) {
savefile.delete();
}
savefile.createNewFile();
FileOutputStream outputStream = new FileOutputStream(
savePath+saveName, true);
AlertDialog.Builder loadPercentAlert = new AlertDialog.Builder(MainActivity.this);
ProgressBar percentBar;
loadPercentAlert.setTitle("Downloading...");
percentBar = new ProgressBar(MainActivity.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
percentBar.setLayoutParams(lp);
loadPercentAlert.setView(percentBar);
loadPercentAlert.create().show();
byte[] buffer = new byte[1024];
int readCount = 0;
int readNum = 0;
int prevPercent = 0;
while (readCount < fileSize && readNum != -1) {
readNum = inputStream.read(buffer);
if (readNum > -1) {
outputStream.write(buffer, 0, readNum);
readCount = readCount + readNum;
int percent = (int) (readCount * 100 / fileSize);
if (percent > prevPercent) {
prevPercent = percent;
percentBar.setProgress(percent);
}
}
}
loadPercentAlert.create().cancel();
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
Beim benutzen dieser methode wird ein Fehler ausgeworfen:
Code:
java.io.FileNotFoundException: /storage/extSdCard/freeButtons/soundpack: open failed: EACCES (Permission denied)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at libcore.io.IoBridge.open(IoBridge.java:456)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at loupix.de.freebuttons.MainActivity$6.run(MainActivity.java:163)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at java.lang.Thread.run(Thread.java:818)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at libcore.io.Posix.open(Native Method)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: at libcore.io.IoBridge.open(IoBridge.java:442)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: ... 4 more
Code:
<uses-permission android:name="android.permission.INTERNET"/>;
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Wie könnte man den Fehler(erfolgreich) umgehen?
JavaWolf