我正在写一个测试程序,我想序列化我的一些测试结果到一个文件中。 我一直得到这恼人的许可被拒绝例外。 为了方便起见,我写了一个小样本代码,并仍然得到同样的许可被拒绝警告。 这里是我的代码,我使用getExternalStorageDirectory获得的/ mnt / SD卡/目录:
private void writetry(){
try {
File sdCard = Environment.getExternalStorageDirectory();
Log.d("can write", String.valueOf(sdCard.canWrite()));
Log.d("ExternalStorageState", Environment.getExternalStorageState());
File file = new File(sdCard, "VisitedScreen.temp");
//file.createNewFile();
FileOutputStream f = new FileOutputStream(file);
byte[] buf = "Hello".getBytes();
f.write(buf);
f.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这里是什么logcat的打印出来:
07-12 12:28:47.288: D/can write(253): false
07-12 12:28:47.288: D/ExternalStorageState(253): mounted
07-12 12:28:47.297: W/System.err(253): java.io.FileNotFoundException: /sdcard/VisitedScreen.temp
07-12 12:28:47.437: W/System.err(253): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:244)
07-12 12:28:47.437: W/System.err(253): at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
07-12 12:28:47.437: W/System.err(253): at java.io.FileOutputStream.<init>(FileOutputStream.java:69)
我宣布我的JUnit进行测试清单文件(其实这是错误的地点设置权限)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.mandaria.tippytipper.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="net.mandaria.tippytipper" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
</manifest>
任何建议表示赞赏!
补充:我相同的代码复制到一个正常的Android程序,它的工作原理,以及sdCard.canWrite()返回true。 但在Android的Junit的测试项目中它不工作。 任何人都知道这是为什么?
问题解决:感谢所有那些你已经回答。 这是因为我没有在原生Android程序添加。 我还注意到,我不需要任何许可添加到JUnit测试项目。 这是非常有趣的是,写操作在测试项目中发生的事情,但允许在原项目所需。 我想知道如果我在做什么针对.apk文件黑盒测试。 我无法改变从字节码正确的权限?