与Android

时间:2015-04-26 10:51:35

标签: java android android-intent mobile-application

我的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:\”的网址。谢谢。

2 个答案:

答案 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) {

    }
});