我的Android应用程序有坐在亚马逊s3桶上的mp3文件。我有一个URL来访问该音频剪辑。我可以通过将URL传递到媒体播放器的数据源来使用MediaPlayer播放音频剪辑。
我正在创建一个应用程序,允许用户将我的应用程序中的音频剪辑共享到其他IM应用程序,如whatsapp。因此,我将在Activity上提供一个共享小部件,然后在该小部件上进行操作,然后应该打开whatsapp并且用户应该能够选择他想要共享音频剪辑的联系人。
为此,我需要将音频片段下载到本地存储系统,然后使用ContentURI与其他应用共享该文件。但是我无法弄清楚最好的方法是什么。
根据Android文档,以下代码可用于发送二进制文件:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
我假设音频文件是二进制文件。所以,我使用下面的代码发送音频剪辑。
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, uriToImage);
intent.setType("audio/mpeg3");
startActivity(intent);
看起来我在这里唯一缺少的是“uriToImage”。任何人都可以帮助我了解如何获取位于URL的资源的“uriToImage”。 ?
根据CommonsWare的评论更新了代码。以下是更新后的代码:
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
Uri contentUri = Uri.fromFile(new File(clipAudioUrl));
intent.putExtra(Intent.EXTRA_STREAM, contentUri);
intent.setType("audio/mpeg");
intent.setPackage("com.whatsapp");
startActivity(intent);
在触摸共享小部件时,Watsapp正在直接打开(这就是我想要的),但是共享正在以错误“共享失败”为特色。我假设这是因为我使用了以下代码的uri:
Uri contentUri = Uri.fromFile(new File(clipAudioUrl));
根据CommonsWare的评论,whatsapp还希望URI的格式为“file:\”或“content:\”
您能否帮我转换格式为“file:\”或“content:\”的网址。谢谢。
答案 0 :(得分:0)
我将在Activity上提供一个共享小部件,并在该小部件上进行修改,然后应该打开whatsapp
仅当用户选择WhatsApp时。请不要认为您的应用的所有用户都安装了WhatsApp,或者想要将WhatsApp用于您应用中的所有内容。
为此,我需要将音频片段下载到本地存储系统,然后使用ContentURI与其他应用共享该文件。
从技术上讲,您可以将您的S3网址与ACTION_SEND
一起使用,但这意味着该网址是公开的。
否则,使用您想要的任何内容(AWS SDK,HttpUrlConnection
,OkHttp等)将文件下载到内部存储(例如getCacheDir()
),然后使用FileProvider
为其提供服务到其他应用程序。 FileProvider
可以为Uri
提供ACTION_SEND
。
答案 1 :(得分:0)
此代码适用于图片共享,但请帮助共享音频和视频文件,该文件链接到whatsapp和messenger
String url = "http://api.androidhive.info/json/movies/1.jpg";
Picasso.with(getApplicationContext()).load(url).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("image");
i.setPackage("com.whatsapp");
i.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(bitmap));
try {
startActivity(Intent.createChooser(i, "Share Image"));
}catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext().getApplicationContext(), "Whatsapp have not been installed.", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});