Мое приложение использует каталог данных на SD-карте для хранения файлов. При запуске он создает этот каталог, если он еще не присутствует. По какой-то причине это работает на разных AVD, которые я установил, за исключением того, что я не могу заставить его работать, если я установил разрешение в QVGA.
Код скучный:
File root = new File("/sdcard/mydir");
if(!root.exists()) {
try {
root.mkdir();
}
catch...
mkdir() возвращает false.
Любые идеи, почему?
Оказалось, что я забыл добавить разрешение SD-карты моему манифесту:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Без разрешения программа работала на всех эмуляторах, кроме QVGA, и даже на моем Droid.
Возможно, вы забыли настроить SD-карту при создании QVGA AVD. Попробуйте настроить его снова.
Кроме того, вы не должны быть жестким путем кодирования внешнего хранилища. http://developer.android.com/guide/topics/data/data-storage.html объясняет некоторые из API-интерфейсов для доступа к внешнему хранилищу.
Следующий фрагмент может обнаружить некоторые проблемы при установке.
boolean mExternalStorageAvailable = false; boolean mExternalStorageWriteable = false; String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(состояние)) { // Мы можем читать и писать медиа mExternalStorageAvailable = mExternalStorageWriteable = true; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // Мы можем читать только носители mExternalStorageAvailable = true; mExternalStorageWriteable = false; } else { // Что-то еще не так. Это может быть одно из многих других государств, но все, что нам нужно // знать, мы не можем ни читать, ни писать mExternalStorageAvailable = mExternalStorageWriteable = false; }