копировать изображения с Assest на SD-карту при установке приложения для Android

У меня есть некоторые изображения, которые должны отображаться в приложении, вопрос: как скопировать изображения, которые я помещаю в папку с ресурсами в коде, в папку под картой SC пользователя при установке приложения на телефон


person omnia Mm    schedule 29.08.2012    source источник


Ответы (2)


Попробуйте с этим,

private void copyAssets() {
    AssetManager assetManager = getAssets();
    String[] files = null;
    try {
        files = assetManager.list("");
    } catch (IOException e) {
        Log.e("tag", e.getMessage());
    }
    for(String filename : files) {
        InputStream in = null;
        OutputStream out = null;
        try {
          in = assetManager.open(filename);
          out = new FileOutputStream("/sdcard/" + filename);
          copyFile(in, out);
          in.close();
          in = null;
          out.flush();
          out.close();
          out = null;
        } catch(Exception e) {
            Log.e("tag", e.getMessage());
        }       
    }
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}

Не забудьте добавить это разрешение в свой манифест

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
person Aerrow    schedule 29.08.2012
comment
это папка с ресурсами вашего приложения. - person Aerrow; 29.08.2012
comment
как я могу проверить, впервые ли пользователь запускает приложение, так как я не хочу каждый раз, когда происходит копирование ?! - person omnia Mm; 29.08.2012
comment
проверьте длину папки sdCard, если она пуста, значит, вы скопируете, в противном случае вы этого не сделаете. - person Aerrow; 29.08.2012
comment
out = новый FileOutputStream (/ sdcard / + filename); ,, произошла ошибка файл не существует - person omnia Mm; 29.08.2012
comment
Прежде всего создайте каталог для перемещения изображений. затем пользователь out = new FileOutputStream (/ sdcard / Your_Folder + filename); - person Aerrow; 29.08.2012

Поэтому мне нужно было сделать что-то подобное, за исключением всех файлов и пакета AOSP при загрузке. Вот ссылка на пакет, если кому-то интересно (см. AssetCopyReceiver.java).

https://github.com/Paradopolis/AssetCopier/blob/master/src/com/paradopolis/assetcopier/AssetCopyReceiver.java

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

person Andrew T.    schedule 03.02.2014