如何播放来自onActivityResult()'的录制音频文件?

时间:2017-05-18 04:22:47

标签: android android-mediaplayer onactivityresult android-audiorecord

我正在使用this库在我的应用中录制音频。

这是我的代码:

recordDefectAudio.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (ContextCompat.checkSelfPermission(getBaseContext(),
                android.Manifest.permission.RECORD_AUDIO) + ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{android.Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_LOCATION);

        }
        if (ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.RECORD_AUDIO) +
                ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {

            String filePath = Environment.getExternalStorageDirectory() + "/recorded_audio.wav";
            int color = getResources().getColor(R.color.colorPrimaryDark);
            AndroidAudioRecorder.with(MainActivity.this)
                    // Required
                    .setFilePath(filePath)
                    .setColor(color)
                    .setRequestCode(RECORD_PRODUCT_DAMAGE)

                    // Optional
                    .setSource(AudioSource.MIC)
                    .setChannel(AudioChannel.STEREO)
                    .setSampleRate(AudioSampleRate.HZ_48000)
                    .setAutoStart(true)
                    .setKeepDisplayOn(true)

                    // Start recording
                    .record();
        }
    }
});

以及onActivityResult()中的代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == RECORD_PRODUCT_DAMAGE) {
            if (resultCode == RESULT_OK) {
                // Great! User has recorded and saved the audio file
                Toast.makeText(this, "Audio recorded successfully!", Toast.LENGTH_SHORT).show();
                playRecordedAudio.setVisibility(View.VISIBLE);
                recordAgain.setVisibility(View.VISIBLE);
                recordDefectAudio.setVisibility(View.INVISIBLE);
            } else if (resultCode == RESULT_CANCELED) {
                // Oops! User has canceled the recording
                Toast.makeText(this, "Audio was not recorded", Toast.LENGTH_SHORT).show();
            }

        }
    }

我想知道的是如何播放onActivityResult()的音频文件,还是有其他方式播放此音频?

请告诉我。

2 个答案:

答案 0 :(得分:0)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RECORD_PRODUCT_DAMAGE) {
        if (resultCode == RESULT_OK) {
            // Great! User has recorded and saved the audio file
            Toast.makeText(this, "Audio recorded successfully!", Toast.LENGTH_SHORT).show();
            playRecordedAudio.setVisibility(View.VISIBLE);
            recordAgain.setVisibility(View.VISIBLE);
            recordDefectAudio.setVisibility(View.INVISIBLE);

    String realPath = null;
    Uri uriPath = null;
    realPath = getPathForAudio(YourActivity.this, data.getData());
    uriPath = Uri.fromFile(new File(realPath)); 
    try{
    MediaPlayer  mp = MediaPlayer.create(context, uriPath);
    mp.start();
    }catch(NullPointerException e) {
    // handle NullPointerException
    }
        } else if (resultCode == RESULT_CANCELED) {
            // Oops! User has canceled the recording
            Toast.makeText(this, "Audio was not recorded", Toast.LENGTH_SHORT).show();
        }

    }
}

然后获取音频文件路径

 public static String getPathForAudio(Context context, Uri uri)
 {
  String result = null;
  Cursor cursor = null;

  try {
    String[] proj = { MediaStore.Audio.Media.DATA };
    cursor = context.getContentResolver().query(uri, proj, null, null, null);
    if (cursor == null) {
        result = uri.getPath();
    } else {
        cursor.moveToFirst();
        int column_index = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DATA);
        result = cursor.getString(column_index);
        cursor.close();
    }
}
catch (Exception e)
{
    e.printStackTrace();
}
finally {
    if (cursor != null) {
        cursor.close();
    }
}
return result;
}

答案 1 :(得分:0)

使用MediaPlayer播放音频文件,在onActivityResult()中编写以下代码,if (resultCode == RESULT_OK)从意图数据中获取音频文件的路径

MediaPlayer mp=new MediaPlayer();  
    try{  
        mp.setDataSource("/sdcard/Music/maine.mp3");//path to your audio file here  
        mp.prepare();  
        mp.start();  

    }catch(Exception e){e.printStackTrace();}  

}  

有关详细信息,请参阅this