2016-02-14 1 views
0

Мое приложение имеет 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, поэтому он не копирует и не передает ничего.

Любая помощь будет очень признательна.

ответ

0

Вам не нужно копировать файлы нигде. Это чище и безопаснее (но больше работы) для вашего приложения, чтобы выставить ContentProvider, который отвечает на Uri, которым вы делитесь. Uri по существу становится локатором вашего файла/ресурса, который другие приложения могут использовать для его чтения.

Посмотрите на official docs on file sharing, чтобы начать.

+0

Я прочитал документацию, но не понял ее. В основном все, что мне нужно, это обмен аудиофайлом, расположенным в res/raw. Я создал файл xml, называемый массивом, который имеет ссылки на все эти аудиофайлы, и я думаю, что это сделает вещи намного проще, но я не знаю, как использовать его в качестве провайдера URI для своих целей. – AlanC92

+0

То, что вы пытаетесь сделать, действительно лучше всего подходит для ContentProvider, но дело не в простом фрагменте кода, чтобы все это правильно работало в экосистеме приложений Android. Если вы решите продолжить это, возможно, другой вопрос о SO может быть уместным, чтобы помочь вам в грубом патче. –

+0

спасибо. Документация и ContentProvider смогли помочь мне решить эту проблему. Моя проблема решена сейчас. – AlanC92