How to play recorded audio file from 'onActivityResult()'?

二次信任 提交于 2019-12-12 04:35:50

问题


I'm using this library to record audio in my app.

Here's my code:

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

and here's the code in 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();
            }

        }
    }

All I want to know is how can I play the audio file from the onActivityResult() or is there some other way of playing this audio?

Please let me know.


回答1:


Use MediaPlayer to play audio file, write the below code in onActivityResult() , if (resultCode == RESULT_OK) get the path to the audio file from intent data

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

}  

See this for more info




回答2:


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

    }
}

Then get Audio file path

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


来源:https://stackoverflow.com/questions/44038543/how-to-play-recorded-audio-file-from-onactivityresult

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!