Bas*_*asj 12 java android android-sdcard android-external-storage
我正在使用三星A3,Android 5.0.2.我正在使用此设置来编译应用程序,即Android 4.1 Jelly Bean(API 16)目标.
我确切地知道了外部可移动microSD卡的路径/mnt/extSdCard/(参见下面的注释#7).
问题:我注意到了
File myDir = new File("/mnt/extSdCard/test");
myDir.mkdirs();
Run Code Online (Sandbox Code Playgroud)
不起作用:没有创建目录.
也:
File file = new File("/mnt/extSdCard/books/test.txt"); // the folder "books" already exists on the external microSD card, has been created from computer with USB connection
FileOutputStream fos = new FileOutputStream(file);
Run Code Online (Sandbox Code Playgroud)
产生此错误:
java.io.FileNotFoundException:/mnt/extSdCard/books/test.txt:open failed:libcore.io.IoBridge.open中的EACCES(权限被拒绝)(...
如何强制读取+写入外部可移动microSD卡?
笔记:
Environment.getExternalStorageDirectory().toString()给出了/storage/emulated/0我的手机内部存储,即不是我想要的.
getExternalFilesDir(null)给出/storage/emulated/0/Android/data/com.blahblah.appname/files/即不是我想要的东西.请注意,我不能getExternalFilesDirs在决赛中使用,s因为这在API16中不可用.此外,API16中也没有运行时权限.
我已经拥有了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,而且READ_EXTERNAL_STORAGE.
我读了很多喜欢的话题这一个或这一个,其实大概20类似的问题,但最后似乎很复杂,一切都和它的相反之说.那是我的我正在寻找特定于这种情况的解决方案.
我不想ACTION_OPEN_DOCUMENT和ACTION_CREATE_DOCUMENT,其实我不希望有任何的GUI解决方案.
我有一些应用程序(Sync Resilio)可以/mnt/extSdCard/music/成功修改,在那里创建新文件等.
顺便说一句,ls -la /mnt/extSdCard/给
drwxrwx--x root sdcard_r 2017-10-15 01:21 Android
drwxrwx--- root sdcard_r 2017-10-14 00:59 LOST.DIR
drwxrwx--- root sdcard_r 2017-12-05 16:44 books
drwxrwx--- root sdcard_r 2017-11-21 22:55 music
Run Code Online (Sandbox Code Playgroud)请记住,某些 Android 设备的 SD 卡路径不同,有些设备没有\xc2\xb4t 有可移动 SD 卡。
\n\n你不必\xc2\xb4t直接设置路径!
\n\nFile myDir = new File("/mnt/extSdCard/test");\nmyDir.mkdirs();\nRun Code Online (Sandbox Code Playgroud)\n\n您可以先检查您的设备是否安装了可移动SD卡:
\n\npublic static boolean isSDCardAvailable(Context context) {\n File[] storages = ContextCompat.getExternalFilesDirs(context, null);\n if (storages.length > 1 && storages[0] != null && storages[1] != null)\n return true;\n else\n return false;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n为什么外部目录 > 1,因为大多数 Android 设备都将外部存储作为主目录,将可移动 SD 卡作为第二目录:
\n\n\n\n但您可以使用一种方法来获取可移动 microSD 卡的真实路径:
\n\npublic static String getRemovableSDCardPath(Context context) {\n File[] storages = ContextCompat.getExternalFilesDirs(context, null);\n if (storages.length > 1 && storages[0] != null && storages[1] != null)\n return storages[1].toString();\n else\n return "";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后就这样做:
\n\nFile myDir = new File(getRemovableSDCardPath(getApplicationContext()),"test");\nif(myDir.mkdirs()){\n Log.i(TAG, "Directory was succesfully create!");\n}else{\n Log.i(TAG, "Error creating directory!");\n}\nRun Code Online (Sandbox Code Playgroud)\n\n例如使用该方法:
\n\n String pathSDCard = getRemovableSDCardPath(getApplicationContext());\nRun Code Online (Sandbox Code Playgroud)\n\n因此,我得到了可移动 SD 卡的路径(如果我\xc2\xb4t 有可移动 SD 卡,我的路径将为“”,因此您可以实施验证以避免创建文件夹):
\n\n/storage/extSdCard/Android/data/com.jorgesys.myapplication/files\nRun Code Online (Sandbox Code Playgroud)\n\n现在在里面创建一个新文件夹:
\n\n File myDir = new File(getRemovableSDCardPath(getApplicationContext()),"test");\n if(myDir.mkdirs()){\n Log.i(TAG, "Directory was succesfully create!");\n }else{\n Log.i(TAG, "Error creating directory!");\n }\nRun Code Online (Sandbox Code Playgroud)\n\n现在我已经创建了目录/test:
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |