java - 如何将 mp3 文件分享到 Whatsapp? (安卓工作室)

标签 java android mp3 share whatsapp

我想将 mp3 文件分享到 Whatsapp。 我发现this question在 Stack Overflow 上,但接受的答案对我不起作用。如果我尝试通过 Whatsapp 分享它,它会显示“分享失败,请重试”:

                    File dest = Environment.getExternalStorageDirectory();
                InputStream in = getResources().openRawResource(R.raw.sound);

                try
                {
                    OutputStream out = new FileOutputStream(new File(dest, "sound.mp3"));
                    byte[] buf = new byte[1024];
                    int len;
                    while ( (len = in.read(buf, 0, buf.length)) != -1)
                    {
                        out.write(buf, 0, len);
                    }
                    in.close();
                    out.close();
                }
                catch (Exception e) {
e.printStackTrace();}

                Intent share = new Intent(Intent.ACTION_SEND);
                share.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageDirectory().toString() + "/sound.mp3"));
                share.setType("audio/mp3");
                startActivity(Intent.createChooser(share, "Shared"));

这是完整的 MainActivity.java:

    package com.example.aaron.sharetest;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class MainActivity extends AppCompatActivity {

    Button shareBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final File FILES_PATH = new File(Environment.getExternalStorageDirectory(), "Android/data/com.example.aaron.sharetest/files");

        File sharefile= new File(FILES_PATH, "sound.mp3") ;
        putExtra(Intent.EXTRA_STREAM, Uri.fromFile(sharefile));


        shareBtn = (Button)findViewById(R.id.shareBtn);

        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                1);

        shareBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {




                if (Environment.MEDIA_MOUNTED.equals(

                        Environment.getExternalStorageState())) {

                    if (!FILES_PATH.mkdirs()) {

                        Log.w("error", "Could not create " + FILES_PATH);

                    }

                } else {

                    Toast.makeText(MainActivity.this, "error", Toast.LENGTH_LONG).show();

                    finish();

                }


                File dest = Environment.getExternalStorageDirectory();
                InputStream in = getResources().openRawResource(R.raw.bibikurz);

                try
                {
                    OutputStream out = new FileOutputStream(new File(dest, "sound.mp3"));
                    byte[] buf = new byte[1024];
                    int len;
                    while ( (len = in.read(buf, 0, buf.length)) != -1)
                    {
                        out.write(buf, 0, len);
                    }
                    in.close();
                    out.close();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }

                Intent share = new Intent(Intent.ACTION_SEND);
                share.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageDirectory().toString() + "/sound.mp3"));
                share.setType("audio/mp3");
                startActivity(Intent.createChooser(share, "Shared"));



        }



        });
    }


}

当然,我在 list 中写了这一行:

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

我需要做什么才能将 mp3 文件分享到 Whatsapp 等?

我尝试了很多已接受的答案,但没有一个对我有用。

这是我在 LogCat 中得到的内容:

06-23 02:41:17.589 23924-23924/? W/Bundle: Key android.intent.extra.STREAM expected ArrayList but value was a android.net.Uri$StringUri.  The default value <null> was returned.
06-23 02:41:17.659 23924-23924/? W/Bundle: Attempt to cast generated internal exception:
                                           java.lang.ClassCastException: android.net.Uri$StringUri cannot be cast to java.util.ArrayList
                                               at android.os.Bundle.getParcelableArrayList(Bundle.java:838)
                                               at android.content.Intent.getParcelableArrayListExtra(Intent.java:5481)
                                               at com.whatsapp.ContactPicker.k(ContactPicker.java:623)
                                               at com.whatsapp.ContactPicker.onCreate(ContactPicker.java:338)
                                               at android.app.Activity.performCreate(Activity.java:6367)
                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2404)
                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)
                                               at android.app.ActivityThread.access$900(ActivityThread.java:165)
                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                               at android.os.Looper.loop(Looper.java:150)
                                               at android.app.ActivityThread.main(ActivityThread.java:5621)
                                               at java.lang.reflect.Method.invoke(Native Method)
                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

最佳答案

Android 6.0 Marshmallow (API 23) 或更高版本。如果是这种情况,您必须实现 runtime permissions

使用文件路径并检查存储卡

文件 FILES_PATH = 新文件(

        Environment.getExternalStorageDirectory(),

        “Android/data/com.examples(您的包)/文件”);

    文件共享文件=新文件(

            FILES_PATH,

            “演示.mp3”) ;

putExtra(Intent.EXTRA_STREAM, Uri.fromFile(sharefile))

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);



        if (Environment.MEDIA_MOUNTED.equals(

            Environment.getExternalStorageState())) {

            if (!FILES_PATH.mkdirs()) {

                Log.w(TAG, "Could not create " + FILES_PATH);

            }

        } else {

            Toast.makeText(this, R.string.need_external_storage, Toast.LENGTH_LONG).show();

            finish();

        }

关于java - 如何将 mp3 文件分享到 Whatsapp? (安卓工作室),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44703119/

相关文章:

webpack - 使用Webpack文件加载器提供mp3文件

flash - AS3-如何找到下载前mp3的总时间?

java - 在 ObjectInputStream.readObject() 上设置超时安全吗?

java - 为什么反射 api 在测试用例中不起作用

android - 如何使用分页库传递 Retrofit Header 和 Field Maps

java - 发送图像文件时如何修复 NetworkOnMainThreadException

java - 使用java编程在android中将.mp3文件格式更改为.aac文件格式

Java 注释困境

java - 如何在java中使用http请求发送文件?

android - MPAndroidChart:BubbleChart 第一个和最后一个气泡呈现一半显示