gpt4 book ai didi

Android 测试 : The storage state is mounted, WRITE_EXTERNAL_STORAGE 权限已声明,但仍然无法写入模拟器的 sdcard

转载 作者:行者123 更新时间:2023-11-28 21:03:00 25 4
gpt4 key购买 nike

我正在编写一个测试程序,我想将我的一些测试结果序列化到一个文件中。我一直收到这个恼人的权限被拒绝异常。为了使事情变得更简单,我编写了一个小示例代码,但仍然收到相同的权限被拒绝警告。这是我的代码,我使用 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 测试 list 文件声明为:(实际上这是设置权限的错误位置)

<?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 测试项目添加任何权限。很有意思的是,写 Action 发生在测试项目中,但在原项目中需要权限。我想知道如果我对 .apk 文件进行黑盒测试会怎样。我不能从字节码更改权限吗?

最佳答案

使用权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

应该添加到您的主项目的 list 中。请记住,测试与主应用程序在同一进程中运行。

关于Android 测试 : The storage state is mounted, WRITE_EXTERNAL_STORAGE 权限已声明,但仍然无法写入模拟器的 sdcard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com