我的应用程序只有一个按钮来播放我手机中的音频文件。非常简单的应用程序,但我无法实现它。
我添加了清单权限,应用程序要求接受它,但无论如何它都不起作用。我按下按钮,它什么也没做。我知道这很简单,但我真的找不到错误。我会感谢任何提示或帮助。提前致谢。
这是主活动:
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)
答案 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" />