如何共享音频文件

时间:2016-02-14 00:27:27

标签: android audio share

我的应用有一个包含多个音频文件的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中的任何文件,因此它不会复制或共享任何内容。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您无需在任何地方复制文件。为您的应用程序公开响应您共享的Uri的ContentProvider,它更干净,更安全(但更多工作)。 Uri本质上成为您的文件/资源​​的定位器,其他应用程序可以使用它来读取它。

查看official docs on file sharing即可开始使用。