我正在尝试创建一个用于共享音频文件的按钮。这不起作用。首先,我尝试直接从我的原始文件夹发送文件,而不是将其复制到手机卡。那并没有解决我的问题。我尝试的第二件事是将文件保存到手机然后共享。将文件保存到手机的部分现在可以正常工作,但是当我尝试将音频文件共享到另一台设备时,所有兼容的应用程序都会崩溃(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。
提前致谢!
答案 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
共享的媒体文件必须存储在外部存储目录中,在这种情况下,您将发送存储在/raw
文件夹中的文件,因此我们必须制作副本,然后通过Whatsapp发出此文件的意图:
这是一个假设有一个文件/raw/jorgesys_sound.mp3
这是使用方法
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发送任何文件。
请记住获得许可:
<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说“无法附加空文件”