Скопируйте аудио из 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
скопировать содержимое.
Также:
Убедитесь, что у вас правильно настроены разрешения во время выполнения
Индексируйте файл назначения так, чтобы его можно было увидеть из других приложений и настольных ОС.