Как добавить файл в проект Android, развернуть его на устройстве, а затем открыть его? - PullRequest
6 голосов
/ 08 сентября 2010

У меня есть проект Android (2.2) в Eclipse (Helios). Я хочу добавить файл MP3 в проект, чтобы файл MP3 был развернут на устройстве вместе с приложением.

Затем я хотел бы открыть файл как объект File, что означает, что мне нужно знать полный путь (?) К файлу на устройстве, но я не знаю, как пути указаны в Android.

Ответы [ 2 ]

12 голосов
/ 08 сентября 2010

Видимо, есть ошибка во Froyo, которая мешает воспроизведению WAV.Аудиофайлы должны быть размещены в директории "res / raw" вашего проекта.Затем используйте идентификатор, чтобы воспроизвести его (или попытаться воспроизвести) MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); mp.start(); Информация: http://developer.android.com/guide/topics/media/index.htmlПример (mp3): http://www.helloandroid.com/tutorials/musicdroid-audio-player-part-i

2 голосов
/ 05 мая 2011

Хорошо, я видел это на источнике другого проекта, поэтому я не придумал, но он работает.

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

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

public void copyfile(String fileName)
      {
        if (!new File(fileName).exists()){
            try
            {
              InputStream localInputStream = getAssets().open(fileName);
              FileOutputStream localFileOutputStream = getBaseContext().openFileOutput(fileName, MODE_PRIVATE);

              byte[] arrayOfByte = new byte[1024];
              int offset;
              while ((offset = localInputStream.read(arrayOfByte))>0)
              {
                localFileOutputStream.write(arrayOfByte, 0, offset);
              }
              localFileOutputStream.close();
              localInputStream.close();
              // The next 3 lines are because I'm copying a binary that I plan
              // to execute, so I need it to have execute permission.
              StringBuilder command = new StringBuilder("chmod 700 ");
              command.append(basedir + "/" + paramString);
              Runtime.getRuntime().exec(command.toString());
              Log.d(TAG, "File " + paramString + " copied successfully.");
            }
            catch (IOException localIOException)
            {
                localIOException.printStackTrace();
                return;
            }
        }
        else
            Log.d(TAG, "No need to copy file " + paramString);
      }

Я считаю, что, вероятно, есть лучший способ скопировать файл, но этот работает, и не замедляет мое приложение, даже если оно вызывается из onCreate (хотя все файлы, которые я копирую, имеют размер менее 100 КБ, поэтому для больших файлов вы наверное хочу отдельную ветку)

Вот как получить путь к вашим файлам:

String path = getBaseContext().getFilesDir().getAbsolutePath();

Если вы хотите записать файл по другому пути, например, «/ sdcard / DCIM / appPictures», я думаю, вы можете использовать этот код:

FileOutputStream outFile = FileOutputStream("/sdcard/DCIM/appPictures/" + fileName);

, а затем скопируйте его побайтно, как в примере выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...