我想我的應用程序將應用程序數據庫存檔到SD卡。在我的代碼中,我檢查目錄canWrite()
是否存在,如果不存在,則拋出IOException
。在這個特定的例子中,我試圖將數據庫文件複製到SD卡上的根目錄,但它拋出了IOException
。如何更改文件夾/文件的權限以便能夠寫入?允許寫入SD卡
允許寫入SD卡
回答
你說得對,SD卡目錄是/sdcard
,但你不應該硬編碼了。取而代之的是,撥打電話到Environment.getExternalStorageDirectory()
拿到目錄:
File sdDir = Environment.getExternalStorageDirectory();
如果您還沒有這樣做的話,你就需要通過添加下面的線,讓您的應用程序寫入SD卡的正確權限你的清單:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
建議的技術上面戴夫的回答肯定是一個不錯的設計實踐,最終是所要求的權限必須在AndroidManifest.xml文件中設置訪問外部存儲。
然而,單式的方式來增加大部分(如果不是所有的,不知道)「清單選項」是通過開展此項活動(或服務)之類的屬性。
Visual Studio Mono插件自動生成清單,所以最好不要 手動篡改它(我確定有些情況下沒有其他選項)。
例如:
[Activity(Label="MonoDroid App", MainLauncher=true, Permission="android.permission.WRITE_EXTERNAL_STORAGE")]
public class MonoActivity : Activity
{
protected override void OnCreate(Bundle bindle)
{
base.OnCreate(bindle);
}
}
實際上,我現在看到這個WRITE_EXTERNAL_STORAGE設置是一個用戶權限,如果按照上面的方式設置,它將在清單文件中顯示爲活動設置(android:permission)而不是用戶權限。哦,我只記得,你在VS中設置了用戶權限用戶的項目屬性(它是一個所有權限的複選框列表)。 – samosaris 2012-08-22 19:18:59
它們實際上是「使用許可」標籤,而不是「用戶許可」,但除此之外,其他所有內容都是正確的。 – samosaris 2012-08-22 20:06:00
有一點是絕對必要的是調用 如果(Build.VERSION.SDK_INT> = 19){ MainActivity.get()getExternalFilesDirs(空)。 } //訪問SD/Android/data/your.package.name //不要試圖自己創建包目錄。不進行此調用會導致mkdir或mkdirs失敗。 – user2607942 2018-01-05 22:54:59
- 1. 寫入SD卡
- 2. 寫入SD卡
- 3. 寫入SD卡
- 4. 寫入SD卡Android
- 5. Android寫入SD卡
- 6. Android:禁用SD卡/不允許安裝SD卡
- 7. 錯誤寫入SD卡
- 8. 在android中寫入SD卡
- 9. 讀取/寫入Ext4 SD卡
- 10. 無法寫入到SD卡
- 11. SD卡寫入失敗?
- 12. failling寫入到SD卡
- 13. Git - 允許寫入訪問
- 14. SD卡寫入限制 - 數據記錄
- 15. 從串行端口寫入SD卡
- 16. 無法寫入位圖到SD卡
- 17. 無法寫入SD卡Android手機上
- 18. 沒有嘗試寫入SD卡的Android
- 19. 將文件寫入Android SD卡
- 20. 寫入SD卡始終未能
- 21. FileNotFoundException +將文件寫入SD卡
- 22. android 6.0無法寫入外部SD卡
- 23. Netduino + Ethernet Shield:如何寫入SD卡?
- 24. 寫入SD卡無法正常工作
- 25. 寫入SD卡時出現問題
- 26. SD卡寫入方法崩潰在AlarmReceiver
- 27. 班級不會寫入我的SD卡
- 28. 如何將TXT文件寫入SD卡?
- 29. 無法在SD卡上寫入文件
- 30. 在Android上寫入內部SD卡
謝謝...我會改變我的代碼按你的建議。然而,目前我有硬編碼,並沒有清單文件中設置的權限,但它允許我將它保存到SD卡無論如何。爲什麼我能夠在沒有權限設置的情況下保存它? – bugzy 2010-02-08 16:34:17
@ user244190 - 我的猜測是您的手機正在運行Android 1.5。 'WRITE_EXTERNAL_STORAGE'是在1.6中引入的,所以如果你希望它是向前兼容的,你需要將它包含在你的應用程序中。 – 2010-02-08 16:38:32
gotcha。感謝... – bugzy 2010-02-08 21:01:05