Разрешение на запись на SD-карту

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

Ответ 1

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

File sdDir = Environment.getExternalStorageDirectory();

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

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

Ответ 2

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

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

Плагин 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);
  }
}