如何从“ onActivityResult()”播放录制的音频文件? [英] How to play recorded audio file from 'onActivityResult()'?

查看:165
本文介绍了如何从“ onActivityResult()”播放录制的音频文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

这是我的代码:

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()播放音频文件,或者还有其他播放此音频的方法吗?

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?

请让我知道。

推荐答案

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

这篇关于如何从“ onActivityResult()”播放录制的音频文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆