Разрешение на запись на SD-карту - PullRequest
79 голосов
/ 23 января 2010

Я бы хотел, чтобы мое приложение архивировало базу данных приложения на SD-карту. В своем коде я проверяю, существует ли каталог canWrite(), и если нет, выдает IOException. В данном конкретном случае я пытаюсь скопировать файл db в корневой каталог на SD-карте, но он выдает IOException. Как я могу изменить разрешение для папки / файла, чтобы иметь возможность записи в нее?

Ответы [ 2 ]

208 голосов
/ 23 января 2010

Вы правы, что каталог SD Card /sdcard, но вам не стоит его жестко кодировать. Вместо этого сделайте вызов Environment.getExternalStorageDirectory(), чтобы получить каталог:

File sdDir = Environment.getExternalStorageDirectory();

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

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
1 голос
/ 22 августа 2012

Предложенный выше метод в ответе Дейва, безусловно, является хорошей практикой проектирования, и да, в конечном счете, для доступа к внешнему хранилищу в файле AndroidManifest.xml должно быть установлено необходимое разрешение.

Тем не менее, моно-способ добавить большинство (если не все, не уверен) "вариантов манифеста" - через атрибуты класса, реализующего действие (или службу).

Плагин Visual Studio Mono автоматически создает манифест, поэтому лучше не вмешаться вручную (я уверен, что есть случаи, когда нет другого выбора).

Например:

[Activity(Label="MonoDroid App", MainLauncher=true, Permission="android.permission.WRITE_EXTERNAL_STORAGE")]
public class MonoActivity : Activity
{
  protected override void OnCreate(Bundle bindle)
  {
    base.OnCreate(bindle);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...