简体   繁体   English

如何从“ onActivityResult()”播放录制的音频文件?

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

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() : 这是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? 我只想知道如何播放onActivityResult()的音频文件,或者还有其他方法可以播放此音频?

Please let me know. 请告诉我。

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

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播放音频文件, if (resultCode == RESULT_OK)从意图数据获取音频文件的路径,请在onActivityResult()编写以下代码

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 看到这个更多的信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM