Скопируйте аудио из URI в определенный каталог

Я получаю песню из библиотеки пользователя так:

Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
            selectIntent.setType("audio/*");
            startActivityForResult(selectIntent, SONG_REQUEST_CODE);

и получить это так:

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == SONG_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            if ((data != null) && (data.getData()!=null)) {
                song = data.getData(); //song is an Uri defined previuosly
            }
        }
    }

Мне нужно импортировать его в папку, которую я определил и создал следующим образом:

final File dir2 = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Chords/Imported Audio");
dir2.mkdirs();

Я попытался так, как предложено Commonsware, но файл не создан:

private void importAudio(Uri uri) {
    String source = uri.getPath();
    String destinationFile = dir2 + File.separator + songName;

    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;

    try {
        bis = new BufferedInputStream(new FileInputStream(source));
        bos = new BufferedOutputStream(new FileOutputStream(destinationFile, false));

        byte[] buf = new byte[1024];
        bis.read(buf);
        do {
            bos.write(buf);
        } while (bis.read(buf) != -1);

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (bis != null) bis.close();
            if (bos != null) bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Файл не там, хотя. Как я могу это исправить?

1 ответ

Решение

Файла там нет

Скорее всего, у вас есть трассировка стека в LogCat. song.getPath() вряд ли будет полезным. song вероятно, не имеет file схема, и так getPath() бессмысленно.

использование ContentResolver а также openInputStream() чтобы получить InputStream на songзатем используйте это InputStream скопировать содержимое.

Также:

Другие вопросы по тегам