Мое приложение имеет ListView
, содержащий несколько аудиофайлов. Если пользователь долго нажимает ListViewItem
, он будет совместно использовать выбранный аудиофайл. Я читал, что, чтобы поделиться чем-то, сначала мне нужно скопировать файл на внешнее хранилище, а затем поделиться им. Я использовал следующий код, чтобы сделать это:Как обмениваться аудиофайлами
private void copyToExternalStorage(String sourceFilePath, String fileName)
{
File sourceFile = new File(sourceFilePath);
String destinationPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myApp";
File destinationFile = new File(destinationPath);
if (!destinationFile.exists())
destinationFile.mkdirs();
destinationFile = new File(destinationPath + "/" + fileName + ".mp3");
try
{
FileUtils.copyFile(sourceFile, destinationFile);
} catch (IOException e)
{
e.printStackTrace();
}
}
private void share(String file, String trackName)
{
copyToExternalStorage(file, trackName);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("audio/*");
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myApp/" +
trackName +
".mp3";
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
startActivity(Intent.createChooser(shareIntent, "Share audio"));
}
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l)
{
share(getResources().getStringArray(R.array.sounds)[i], getResources().getStringArray(R.array.tracks)
[i]);
return true;
}
R.array.sounds
где я хранятся мои аудио файлы, и R.array.tracks
где я хранила имена треков. Проблема, которую я получаю, заключается в том, что мое приложение не находит файлы в данном sourceFilePath
, поэтому он не копирует и не передает ничего.
Любая помощь будет очень признательна.
Я прочитал документацию, но не понял ее. В основном все, что мне нужно, это обмен аудиофайлом, расположенным в res/raw. Я создал файл xml, называемый массивом, который имеет ссылки на все эти аудиофайлы, и я думаю, что это сделает вещи намного проще, но я не знаю, как использовать его в качестве провайдера URI для своих целей. – AlanC92
То, что вы пытаетесь сделать, действительно лучше всего подходит для ContentProvider, но дело не в простом фрагменте кода, чтобы все это правильно работало в экосистеме приложений Android. Если вы решите продолжить это, возможно, другой вопрос о SO может быть уместным, чтобы помочь вам в грубом патче. –
спасибо. Документация и ContentProvider смогли помочь мне решить эту проблему. Моя проблема решена сейчас. – AlanC92