Я пишу программу тестирования, и я хочу сериализовать некоторые результаты моих тестов в файл. Я продолжаю получать это раздражающее исключение, в котором отказано в разрешении. Чтобы упростить задачу, я пишу небольшой пример кода и по-прежнему получаю такое же предупреждение об отказе в разрешении. Вот мой код, я использую 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. Я не могу изменить разрешение из байтового кода, верно?
false
, а сразу после этого «D / ExternalStorageState» говорит «смонтировано»? - person t0mm13b   schedule 12.07.2012