我的Android应用程序无法将文件写入AVD的SD卡,这是代码:
File root = Environment.getExternalStorageDirectory();
Log.w("sdcard", "root.canWrite() = " + root.canWrite());
try {
File myFile = new File(root + File.pathSeparator + "mysdfile.txt");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append("testing testing 123");
myOutWriter.close();
fOut.close();
} catch (IOException e) {
Log.w("ExternalStorage", "Error writing", e);
}
root.canWrite()
返回true,然后引发此异常:
java.io.IOException: open failed: EROFS (Read-only file system)
清单文件具有WRITE_EXTERNAL_STORAGE权限(清单的直接子代):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我还尝试使用以下方法重新安装AVD外壳中的SD卡:
mount -o remount rw /mnt/sdcard
......但无济于事。 AVD还具有“SD卡支持”标志设置。不知道该怎么做,有什么想法吗?
答案 0 :(得分:5)
从Honeycomb开始,Android设备默认不允许第三方应用程序写入外部可移动存储。您可以通过启动adb shell来检查这一点,转到/system/etc/permissions/platform.xml,然后查找以下行:
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_rw" />
</permission>
第三方应用不属于“sdcard_rw”群组,而是“media_rw”的一部分。 如果您的手机已植根(您的模拟器应该是root),则可以修改platform.xml文件以添加具有此权限的另一个组。它应该是这样的:
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>
一些制造商(我知道三星确实如此)手机上仍然有自己的SD卡插槽,但默认情况下,Nexus 7或GNex都没有固定。
答案 1 :(得分:0)
对任何感兴趣的人来说,问题是我制作了一张sdcard.iso图像并将eclipse作为-sdcard命令行参数传递给AVD。无论出于何种原因,图像都是只读的。通过清除命令行参数并编辑AVD以使用大小为512mb的新SD卡而不是文件来修复此问题。
答案 2 :(得分:0)
在我的情况下,我对斜线有误。在eclipse中指定“附加仿真器命令行选项”
实际上它应该是-sdcard C:/ Kamal / sdcard / emulator_sdcard
我正在放-sdcard C:\ Kamal \ sdcard \ emulator_sdcard
然后重新启动Eclipse&amp;仿真器有效。
答案 3 :(得分:0)
try {
InputStream inputStream2 = openFileInput("database.sqlite3"); File outFile =new File(Environment.getExternalStorageDirectory(), "database15.sqlite3"); outFile.createNewFile(); OutputStream out= new FileOutputStream(outFile); byte[] buf = new byte[1024]; int len; while((len = inputStream2.read(buf))> 0) { out.write(buf); } out.close(); Toast.makeText(getBaseContext(),getFilesDir().toString()+"Done", Toast.LENGTH_LONG).show(); } catch (FileNotFoundException ex) { Toast.makeText(getBaseContext(),"file not found", Toast.LENGTH_LONG).show(); } catch (IOException e) { Toast.makeText(getBaseContext(),e.getMessage(), Toast.LENGTH_LONG).show(); }