- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将文件存储到外部存储设备 (Android 4.2.2)。
我在 manifest.xml 中使用了正确的权限:
<manifest ...>
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
...
外置sd卡可用,我可以用其他app读写文件来证明。路径/mnt/extsd/是有效的,看下图。外置sd卡是可写的,因为我可以复制/粘贴文件到里面。
代码:
try {
String path = "/mnt/extsd/file.dat"
File f = new File(path);
f.createNewFile();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
我在 f.createNewFile();
上收到错误:
W/System.err(2172): java.io.IOException: open failed: EACCES (Permission denied)
W/System.err(2172): at java.io.File.createNewFile(File.java:948)
W/System.err(2172): at solarapp.activities.settings.application.ActivityBackup$BackupTask.doInBackground(ActivityBackup.java:77)
W/System.err(2172): at solarapp.activities.settings.application.ActivityBackup$BackupTask.doInBackground(ActivityBackup.java:1)
W/System.err(2172): at android.os.AsyncTask$2.call(AsyncTask.java:287)
W/System.err(2172): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
W/System.err(2172): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W/System.err(2172): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
W/System.err(2172): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
W/System.err(2172): at java.lang.Thread.run(Thread.java:856)
W/System.err(2172): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
W/System.err(2172): at libcore.io.Posix.open(Native Method)
W/System.err(2172): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
W/System.err(2172): at java.io.File.createNewFile(File.java:941)
如果我使用 String path = "/mnt/extsd/file.dat"
一切正常!那么,问题出在哪里?
编辑
我正在使用此解决方案来获取可用存储列表:
How can I get the list of mounted external storage of android device
并且,按照建议,我发布命令 adb shell cat/proc/mounts
的结果:
rootfs / rootfs rw 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/secure tmpfs rw,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
/dev/block/by-name/system /system ext4 ro,relatime,data=ordered 0 0
/dev/block/by-name/cache /cache ext4 rw,nosuid,nodev,noatime,nomblk_io_submit,data=ordered 0 0
/dev/block/by-name/data /data ext4 rw,nosuid,nodev,noatime,nomblk_io_submit,noauto_da_alloc,data=ordered 0 0
/dev/block/vold/93:72 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/93:72 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/block/vold/179:1 /mnt/extsd vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0
响应命令adb shell cat/proc/partitions
major minor #blocks name
93 0 32768 nanda
93 8 16384 nandb
93 16 16384 nandc
93 24 786432 nandd
93 32 1048576 nande
93 40 16384 nandf
93 48 32768 nandg
93 56 524288 nandh
93 64 131072 nandi
93 72 4409344 nandj
179 0 3849216 mmcblk0
179 1 3845120 mmcblk0p1
响应命令adb shell cat/proc/devices and adb shell ls -l/mnt
Character devices:
1 mem
4 /dev/vc/0
4 tty
5 /dev/tty
5 /dev/console
5 /dev/ptmx
7 vcs
10 misc
13 input
29 fb
81 video4linux
100 telephony
108 ppp
116 alsa
128 ptm
136 pts
150 cedar_dev
166 ttyACM
180 usb
188 ttyUSB
189 usb_device
216 rfcomm
247 lcd
248 capture
249 disp
250 ttyGS
251 ttyS
252 sunxi_pwm
253 bsg
254 rtc
Block devices:
259 blkext
7 loop
8 sd
65 sd
66 sd
67 sd
68 sd
69 sd
70 sd
71 sd
93 nand
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
179 mmc
254 device-mapper
/system/bin/sh: cat: and: No such file or directory
/system/bin/sh: cat: adb: No such file or directory
/system/bin/sh: cat: shell: No such file or directory
/system/bin/sh: cat: ls: No such file or directory
/system/bin/sh: cat: -l: No such file or directory
/system/bin/sh: cat: /mnt: Is a directory
响应命令adb shell ls -l/mnt
drwxr-xr-x root system 2014-04-22 11:56 asec
d---rwxr-x system media_rw 1970-01-01 01:00 extsd
drwxrwx--- media_rw media_rw 2014-04-22 11:56 media
drwxr-xr-x root system 2014-04-22 11:56 obb
d---rwxr-x system sdcard_rw 2014-04-22 12:26 sdcard
drwx------ root root 2014-04-22 11:56 secure
drwx------ shell shell 2014-04-22 11:56 shell
d--------- system system 2014-04-22 11:56 usbhost1
最佳答案
Response to the command adb shell ls -l /mnt
d---rwxr-x system media_rw 1970-01-01 01:00 extsd
要写入 extsd
,该进程需要成为 media_rw
组的一部分,但 WRITE_EXTERNAL_STORAGE
将其添加到 sdcard_rw
团体。您需要的权限是 WRITE_MEDIA_STORAGE
但不幸的是,它的保护级别是 signatureOrSystem
,所以您不能在您的应用中使用
关于java - 为什么我可以写入 "mnt/sdcard"而不是 "mnt/extsd"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23217023/
我在 /data/data/files/settings.dat 中有一个文件并想将此文件存储/复制到 sdcard 中,该文件已被很好地读取但是当尝试将其复制到 sdcard 时,我有一个异常(ex
我只想知道如何在android模拟器中删除虚拟sdcard。 最佳答案 有了有关使用“rm -r *”系列命令的预期注意事项和警告,您还可以使用:adb -e shell rm -r/mnt/sdca
我正在尝试将位图保存到图片目录中。这是代码 File path = Environment.getExternalStoragePublicDirectory(Environm
我有一个很大的(50 兆)下载,如果已安装,我想将其加载到 SD 卡中。如果没有sdcard,我就下载到内部存储。我检查两种情况下的可用空间。 我的代码在模拟器和我的 Droid 2 上运行良好。我的
我快被一个奇怪的问题气疯了。如果我在我的代码中创建一个文件夹作为 directory_path = Environment.getExternalStorageDirectory()
我有一个特殊的问题,我有一个在启动完成时启动的 android 服务。服务完成从 sdcard 读取文件并将 pid 写入 sdcard 的工作,但是 .使用日志我知道原因是:无法将数据写入 sdca
我正在为 Yocto (Morty) 开发一个 sdcard 图像类,这基本上是直截了当的。必须在屋顶完成后构建 SD 卡镜像。 这可以由 IMAGE_TYPEDEP_sdcard 指示,在我的情况下
任何人都可以帮我解决 traceview 问题!我创建了 sdcard 并将其安装在我的模拟器上,关闭我的应用程序后,当我尝试拉取复制文件时(使用命令:adb pull/sdcard/calc.tra
我正在开发一个基本的音乐播放器,它将获取 SDCard 上的歌曲。它处于早期阶段,我遇到了一个小问题。每当我在手机上运行该应用程序时,它都能很好地播放 SDCard 上的歌曲。现在,当我在教师手机上运
我正在尝试将我在某些 Activity 中拥有的位图保存到我为此目的创建的目录中的外部存储。将图像保存到 sdcard(外部存储器,而不是外部 sd)的方法在不同的类(和不同的包)中,所以我假设我需要
我知道这个问题可能已经回答了很多次,我也进行了搜索,但我无法解决我的问题。每次我尝试写入 SD 卡时,它似乎都会写入内部存储。我的代码行很简单 File root = android.os.Envir
我想知道,是否可以在重新启动应用程序时暂停下载,退出应用程序并恢复从远程服务器下载文件到手机的 SDCard。 然后跟进问题:我有一个通过 HTTP 下载的代码。我也可以通过 FTP 完成吗?哪个更好
我的应用程序中有一个 Activity ,它基本上是一个画廊,显示位于我的 SD 卡上的图片。我正在使用此功能重新安装 sdcard 以在 Activity 开始时扫描新图像: sendBro
我想在 SD 卡上的特定文件夹中创建新文件时收到通知(通过广播)。我可以创建服务并为其轮询,但我更喜欢系统事件(如果存在的话)。 最佳答案 我找到了。 FileObserver会做的。 关于Andro
随着我应用中数据库的增长,它需要越来越多的内部手机空间。数据库中没有任何敏感/隐私数据,因此我有兴趣将其移至 SD 卡。 我正在使用 SQLiteOpenHelper 来协助数据库工作。据我了解,您不
我正在尝试将 Http 帖子回复中的文件写入 sdcard 上的文件。在检索到数据的字节数组之前,一切正常。 我尝试在 list 中设置 WRITE_EXTERNAL_STORAGE 权限并尝试了我在
我想在 Sdcard 中创建目录,并且我确实遵循: 我添加了:在 list 中。 我通过以下方式获取 root_path:public static final String ROOT_PATH =
我正在尝试使用以下代码在/storage/emulated/0/Pictures 下创建目录: File(Environment.getExternalStoragePublicDir
为什么Environment.getExternalStorageDirectory()返回内部存储(storage/sdcard0/)?就我而言,sdcard0 是本地的,sdcard1 是外部的.
我的对话框显示目录 /sdcard 及其所有文件。选择文件/图像后,路径将与位图图像一起保存,例如 file.name = "/sdcard/Pictures/Screenshots/Screensh
我是一名优秀的程序员,十分优秀!