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



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

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

这是主要活动:

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)

尝试这个

//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

我终于实现了它的工作原理。

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();
}
}

*不要忘记将权限添加到Manifest:

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

最新更新