Разрешения на телефоне при отладке?

1

Я использую метод резервного копирования для копирования базы данных приложения в SDCard.

Это отлично работает в эмуляторе, но когда я пытаюсь запустить его на своем телефоне, он падает. Ниже приведена соответствующая таблица:

W/KeyCharacterMap(15814): Can't open keycharmap file
W/KeyCharacterMap(15814): Error loading keycharmap file '/data/usr/keychars/tegra-kbc.kcm.bin'.     hw.keyboards.0.devname='tegra-kbc'
W/System.err(15814): java.io.FileNotFoundException: /mnt/sdcard/GroceryList.bak (Permission denied)
W/System.err(15814):    at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
W/System.err(15814):    at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
W/System.err(15814):    at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
W/System.err(15814):    at java.io.FileOutputStream.<init>(FileOutputStream.java:66)

Моя первая мысль была права (из - за разрешения отказано в StackTrace), но я дважды проверил мой манифест и она содержит:

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

Если это что-то в методе:

public void backup() {
    try {
        File sdcard = Environment.getExternalStorageDirectory();
        File outputFile = new File(sdcard,
                "GroceryList.bak");
        File data = Environment.getDataDirectory();
        File inputFile = new File(data,
                "data/cdc.workshopapps.grocerylist/databases/GroceryList");
        InputStream input = new FileInputStream(inputFile);
        OutputStream output = new FileOutputStream(outputFile);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = input.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
        output.flush();
        output.close();
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
        throw new Error("Copying Failed");
    }
}

Есть ли что-то, что мне нужно сделать, чтобы включить это разрешение на телефоне, кроме запуска программы из Eclipse?

РЕДАКТИРОВАТЬ

Весь манифест в соответствии с запросом:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cdc.workshopapps.grocerylist"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".GroceryListMain"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

И в случае, если это имеет значение, телефон, который я использую, - это Motorola Droid X2 (это имело значение для моего последнего номера, поэтому я подумал, что упомянул об этом).

  • 0
    java.io.FileNotFoundException - это ваша проблема
  • 0
    Хмм, конечно это не ... Я пытаюсь создать это там. :п
Показать ещё 6 комментариев
Теги:
android-file
android-sdcard

3 ответа

2
Лучший ответ

Мой комментарий "Google сказал, что SD-карта не должна монтироваться". был правильным ответом в соответствии с ОП.

1

Я думаю, ваша проблема в том, что файл не существует... Попробуйте создать его сначала:

 File outputFile = new File(sdcard, "GroceryList.bak");
 if (!outputFile.exists())
     outputFile.createNewFile();
  • 0
    Я попробую ... так как я следовал за другим ответом здесь, я не думал, что должен был бы добавить что-нибудь дополнительное к этому.
  • 0
    Не сработало, но ошибка изменилась: W/System.err(17105): java.io.IOException: Permission denied Я продолжаю возвращаться к разрешениям, но у меня есть требуемое разрешение в моем манифесте ...
Показать ещё 5 комментариев
0

Вы уверены, что этот файл уже существует? иногда просто создавая файл-объект (новый файл (..)) не создает сам файл. Если FileNotFoundException происходит, значит, файл еще не существует. Вы можете создать его, вызвав file.createNewFile().

 File f= new File(sdcard, "GroceryList.bak");
   if(!f.exists())
   f.createNewFile();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню