![](/img/trans.png)
[英]How to save file to public (external) storage on Android Q (API 29)?
[英]how to Save Public File in Android external storage
我正在開發一個Android應用,其中我將pdf文件從互聯網下載到外部目錄。 我已經嘗試了很多方法,但是總是有錯誤。 我在下面依次列出我的代碼和錯誤:
1。
String fname=title+".pdf";
loc="/sdcard"+"/"+fname;
output=new FileOutputStream(loc);
錯誤:
BookActivity(1255): /sdcard/Pragmatic Unit Testing in Java with JUnit.pdf: open failed: EACCES (Permission denied)
2。
File outputdir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
String fname=title+".pdf";
loc=outputdir.getAbsolutePath()
output=new FileOutputStream(loc);
錯誤:BookActivity(1172):/針對PHP Developers.pdf的/storage/sdcard/Download/Node.js:打開失敗:ENOENT(無此類文件或目錄)
我的AndroidManifest.xml文件具有此權限:
<!-- Permission: Allow Connect to Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Permission: Writing to SDCard -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
請幫我做什么?? 另外,如果可以的話,請告訴我如何將公共文件保存在內部存儲器中。
在https://stackoverflow.com/a/7887114/964741上也嘗試了答案
但又是錯誤:
BookActivity(1319): /storage/sdcard/Apache Axis2 Web Services, 2nd Edition.pdf: open failed: EACCES (Permission denied)
在第一個錯誤中,您使用了錯誤的路徑(我想)。 從4.4版本開始(我不確定),他們更改了訪問外部設備的方式。
您應該寫:
String fname=title+".pdf";
loc="/mnt/media_rw/sdcard"+"/"+fname;
output=new FileOutputStream(loc);
我認為這是正確的方法。
我在清單文件中定義了如下權限:
<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"/>
希望對您有所幫助。
1>要將數據文件寫入sdcard:-
private void writeTextFileToSdcard(File fileObj, String fileName, String fileData) {
fileObj.mkdirs();
File file = new File(fileObj, fileName);
if (file.exists())
file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
OutputStreamWriter myOutWriter = new OutputStreamWriter(out);
myOutWriter.append(fileData);
myOutWriter.close();
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2>將圖像寫入sdacrd:-
private void writeImageFileToSdcard(Bitmap finalBitmap) {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/My_Images");
myDir.mkdirs();
String fname = "Image1.jpg";
File file = new File (myDir, fname);
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
權限是強制性的
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.