共享音频文件

时间:2013-09-08 17:16:46

标签: android audio share

我正在尝试创建一个用于共享音频文件的按钮。这不起作用。首先,我尝试直接从我的原始文件夹发送文件,而不是将其复制到手机卡。那并没有解决我的问题。我尝试的第二件事是将文件保存到手机然后共享。将文件保存到手机的部分现在可以正常工作,但是当我尝试将音频文件共享到另一台设备时,所有兼容的应用程序都会崩溃(Whatsapp,Gmail等)。

这是我的代码:

    String sharePath = Environment.getExternalStorageDirectory().getPath()
    + "/Soundboard/Ringtones/custom_ringtone.ogg";
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("audio/*");
    share.putExtra(Intent.EXTRA_STREAM, sharePath);
    startActivity(Intent.createChooser(share, "Share Sound File"));

顺便说一句,音频文件是.ogg文件。我希望这些应用程序可以使用这种类型的文件。如果不是,我应该将其转换为.mp3。

提前致谢!

6 个答案:

答案 0 :(得分:19)

Oké,发现我做错了什么。对于遇到同样问题的人,我就是这样解决的:

我忘了将字符串解析为uri。这是我必须添加的唯一代码行。 Uri uri = Uri.parse(sharePath);

以下是完整的休息:

    String sharePath = Environment.getExternalStorageDirectory().getPath()
            + "/Soundboard/Ringtones/custom_ringtone.ogg";
    Uri uri = Uri.parse(sharePath);
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("audio/*");
    share.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(share, "Share Sound File"));

另外,请不要忘记添加权限WRITE_EXTERNAL_STORAGE,否则在运行应用程序时会出错。

答案 1 :(得分:1)

更改此行,它将支持whatsapp和其他应用:

share.setType("audio/mp3");

因为whatsapp不支持("audio/*");("*/*");

答案 2 :(得分:1)

通过WhatsApp发送音频文件:

我们必须记住,要通过WhatsApp共享的媒体文件必须存储在外部存储目录中,在这种情况下,您将发送存储在/raw文件夹中的文件,因此我们必须制作副本,然后通过Whatsapp发出此文件的意图:

这是一个假设有一个文件/raw/jorgesys_sound.mp3

的例子

enter image description here

这是使用方法

  private void sendWhatsAppAudio(){
        try {
           //Copy file to external ExternalStorage.
           String mediaPath = copyFiletoExternalStorage(R.raw.jorgesys_sound, "jorgesys_sound.mp3");

           Intent shareMedia = new Intent(Intent.ACTION_SEND);
            //set WhatsApp application.
            shareMedia.setPackage("com.whatsapp");
            shareMedia.setType("audio/*");
            //set path of media file in ExternalStorage.
            shareMedia.putExtra(Intent.EXTRA_STREAM, Uri.parse(mediaPath));
        startActivity(Intent.createChooser(shareMedia, "Compartiendo archivo."));
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Whatsapp no se encuentra instalado", Toast.LENGTH_LONG).show();
        }
    }

    private String copyFiletoExternalStorage(int resourceId, String resourceName){
        String pathSDCard = Environment.getExternalStorageDirectory() + "/Android/data/" + resourceName;
        try{
        InputStream in = getResources().openRawResource(resourceId);
        FileOutputStream out = null;
        out = new FileOutputStream(pathSDCard);
        byte[] buff = new byte[1024];
        int read = 0;
        try {
            while ((read = in.read(buff)) > 0) {
                    out.write(buff, 0, read);
            }
        } finally {
            in.close();
            out.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return  pathSDCard;
  }

使用这种方法,您可以通过WhatsApp发送任何文件。

enter image description here

请记住获得许可:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

答案 3 :(得分:0)

以下代码对我有用

    SoundFiles soundFiles=.....
    String FullFilePath=soundFiles.getPath();
    Uri uri = Uri.fromFile(new File(FullFilePath));
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("audio/*");
    share.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(share, "Share Sound File"));

答案 4 :(得分:0)

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new
File(Environment.getExternalStorageDirectory().getPath() + 
"/myMusic/Sound.mp3"))); 
intent.setType("audio/*");
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
startActivity(Intent.createChooser(intent, "Share Audio Abd Alazez..."));

答案 5 :(得分:-1)

我正在使用:

final Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("audio/mp3");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageDirectory().toString() + "/breakfast.mp3"));
startActivity(Intent.createChooser(shareIntent, "Condividi attraverso:"));

但是gmail说“无法附加空文件”