我正在编写一个测试程序,我想将我的一些测试结果序列化到一个文件中。我不断收到这个烦人的权限被拒绝异常。为了让事情变得更容易,我编写了一个小示例代码,但仍然得到相同的权限被拒绝警告。这是我的代码,我使用 getExternalStorageDirectory 来获取 /mnt/sdcard/ 目录:
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 文件进行黑盒测试怎么办。我无法更改字节码的权限,对吗?