如何播放应用程序文件夹中的音频文件?

时间:2021-06-18 16:49:19

标签: android android-studio

我的应用程序只有一个按钮来播放我手机中的音频文件。非常简单的应用程序,但我无法实现它。

我添加了清单权限,应用程序要求接受它,但无论如何它都不起作用。我按下按钮,它什么也没做。我知道这很简单,但我真的找不到错误。我会感谢任何提示或帮助。提前致谢。

这是主活动:

package com.doctoractual.playaudiofile;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private Button btnPlay;

    int REQUEST_CODE = 200;

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

        btnPlay = findViewById(R.id.btnPlay);

        checkPerm();
        reproducirAudio();
    }

    public void reproducirAudio(){

        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String rutaArchivo = Environment.getExternalStorageDirectory()+"/mnt/sdcard/Android/data/com.doctoractual.savetts/files/0.wav";
                MediaPlayer mediaPlayer = new  MediaPlayer();
                try {
                    mediaPlayer.setDataSource(rutaArchivo);
                    mediaPlayer.prepare();
                    mediaPlayer.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

    }

    private void checkPerm(){
        int permRead = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);

        if (permRead == PackageManager.PERMISSION_GRANTED){
            Toast.makeText(this, "Permiso concedido", Toast.LENGTH_SHORT).show();
        }else{
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},REQUEST_CODE);
        }
    }

}

这是 logcat:

2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err: java.io.IOException: setDataSource failed.
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1113)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1059)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at com.doctoractual.playaudiofile.MainActivity$1.onClick(MainActivity.java:43)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.view.View.performClick(View.java:5675)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.view.View$PerformClick.run(View.java:22641)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.os.Handler.handleCallback(Handler.java:836)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:103)
2021-06-18 18:45:04.236 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.os.Looper.loop(Looper.java:203)
2021-06-18 18:45:04.237 5560-5560/com.doctoractual.playaudiofile W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6247)
2021-06-18 18:45:04.237 5560-5560/com.doctoractual.playaudiofile W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2021-06-18 18:45:04.237 5560-5560/com.doctoractual.playaudiofile W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
2021-06-18 18:45:04.237 5560-5560/com.doctoractual.playaudiofile W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)

2 个答案:

答案 0 :(得分:0)

试试这个

 //String rutaArchivo = Environment.getExternalStorageDirectory()+"/mnt/sdcard/Android/data/com.doctoractual.savetts/files/0.wav";

mediaPlayer.setDataSource(/mnt/sdcard/Android/data/com.doctoractual.savetts/files/0.wav");

在 src 中创建 raw 文件夹,将音频文件复制并粘贴到 raw 文件夹中

并遵循此

btnPlay = findViewById(R.id.btnPlay);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.YOURAUDIO);
btnPlay.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        mp.start();
    }
});
//this is very simple

答案 1 :(得分:0)

我终于意识到它有效。

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    private Button btnPlay;

    int REQUEST_CODE = 200;

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

        btnPlay = findViewById(R.id.btnPlay);

        checkPerm();
        pressButton();
    }

    public void pressButton(){

        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                playfile();
            }
        });

    }

    private void checkPerm(){
        int permRead = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);

        if (permRead == PackageManager.PERMISSION_GRANTED){
            Toast.makeText(this, "Permiso concedido", Toast.LENGTH_SHORT).show();
        }else{
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},REQUEST_CODE);
        }
    }

    private void playfile(){
        String filename = "/mnt/sdcard/android/data/com.doctoractual.savetts/files/0.wav";

        MediaPlayer mp = new MediaPlayer();
        try { mp.setDataSource(this, Uri.parse(filename)); } catch (Exception e) {}
        try { mp.prepare(); } catch (Exception e) {}
        mp.start();
    }

}

*不要忘记向清单添加权限:

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