从内部存储共享 mp3 数据

Sharing mp3 data from Internal Storage

我试图将我的声音保存在内部存储中而不是共享它们,但是当我按下共享按钮时我的应用程序总是崩溃

public void savesSound(){

    FileOutputStream fos;
    String FILENAME = "sharedsound.mp3";
    File f = new File(FILENAME);

    try {
        InputStream in = getResources().openRawResource(R.raw.ichbin);
        fos = new FileOutputStream(f);
        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf, 0, buf.length)) != -1) {
            fos.write(buf, 0, len);
        }
        fos.close();
        Log.i("Tag","Finish");
    } catch (java.io.IOException e) {
        e.printStackTrace();
    }

}

和分享按钮

            FileInputStream fin = null;
            try {
                fin = openFileInput("sharedsound.mp3");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            Uri uri = Uri.parse(fin.toString());
            shareIntent.setType("audio/*");
            shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
            shareIntent.putExtra(Intent.EXTRA_TEXT, "Hey Check this out Dude");
            startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

首先,InputStream 上的 toString() 没有提供可供 Uri.parse() 使用的路径。

其次,您无法通过 file:// Uri 与其他应用共享内部存储中的文件,因为其他应用无权访问该文件。

您可以 use FileProvider to serve your files to third-party apps. This is covered in one of the Android training modules, and here is a sample app 从内部存储共享最初打包为资产的 PDF。