import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.media.MediaPlayer
import android.media.MediaRecorder
import android.os.Environment
import android.view.View
import android.widget.Toast
import java.io.IOException
import android.widget.ImageButton
class record : AppCompatActivity() {
var buttonStart: ImageButton? = null
var buttonStop: ImageButton? = null
var buttonPlayLastRecordAudio: ImageButton? = null
var buttonStopPlayingRecording: ImageButton? = null
var AudioSavePathInDevice = "Blesson"
var mediaRecorder: MediaRecorder? = null
var mediaPlayer: MediaPlayer? = null
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_record)
buttonStart = findViewById(R.id.record) as ImageButton
buttonStop = findViewById(R.id.stop) as ImageButton
buttonPlayLastRecordAudio = findViewById(R.id.play) as ImageButton
buttonStopPlayingRecording= findViewById(R.id.playstop) as ImageButton
buttonStop!!.isEnabled = false
buttonPlayLastRecordAudio!!.isEnabled = false
buttonStart!!.setOnClickListener {
AudioSavePathInDevice = Environment.getExternalStorageDirectory().absolutePath + "/" +"Medpro.mp3"
MediaRecorderReady()
try {
mediaRecorder!!.prepare()
mediaRecorder!!.start()
} catch (e: IllegalStateException) {
Toast.makeText(this, "Recording roblem started",
Toast.LENGTH_LONG).show()
}
buttonStart!!.isEnabled = false
buttonStart!!.visibility = View.INVISIBLE
buttonStop!!.visibility = View.VISIBLE
buttonStop!!.isEnabled = true
Toast.makeText(this, "Recording started",
Toast.LENGTH_LONG).show()
}
buttonStop!!.setOnClickListener {
mediaRecorder!!.stop()
buttonStop!!.isEnabled = false
buttonPlayLastRecordAudio!!.isEnabled = true
// buttonStart!!.isEnabled = true
buttonStopPlayingRecording!!.isEnabled = false
Toast.makeText(this, "Recording Completed",
Toast.LENGTH_LONG).show()
buttonStop!!.visibility = View.INVISIBLE
buttonPlayLastRecordAudio!!.visibility = View.VISIBLE
}
buttonPlayLastRecordAudio!!.setOnClickListener {
buttonStop!!.isEnabled = false
buttonStart!!.isEnabled = false
buttonPlayLastRecordAudio!!.visibility=View.INVISIBLE
buttonStopPlayingRecording!!.isEnabled = true
buttonStopPlayingRecording!!.visibility=View.VISIBLE
mediaPlayer = MediaPlayer()
try {
mediaPlayer!!.setDataSource(AudioSavePathInDevice)
mediaPlayer!!.prepare()
} catch (e: IOException) {
Toast.makeText(this, "Recoring not found",
Toast.LENGTH_LONG).show()
}
mediaPlayer!!.start()
Toast.makeText(this, "Recording Playing",
Toast.LENGTH_LONG).show()
}
buttonStopPlayingRecording!!.setOnClickListener {
buttonStopPlayingRecording!!.isEnabled = false
buttonPlayLastRecordAudio!!.isEnabled = true
if (mediaPlayer != null) {
mediaPlayer!!.stop()
mediaPlayer!!.release()
MediaRecorderReady()
}
}
}
fun MediaRecorderReady() {
mediaRecorder = MediaRecorder()
mediaRecorder!!.setAudioSource(MediaRecorder.AudioSource.MIC)
mediaRecorder!!.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mediaRecorder!!.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB)
mediaRecorder!!.setOutputFile(AudioSavePathInDevice)
}
}
/* 与此代码相关的错误
致命异常:主进程:com.example.admin.lifeplus,PID:21679 java.lang.RuntimeException:setAudioSource 失败。在 android.media.MediaRecorder.setAudioSource(Native Method) 在 com.example.admin.lifeplus.record.MediaRecorderReady(record.kt:138) 在 com.example.admin.lifeplus.record$onCreate$1.onClick(record.kt :45) 在 android.view.View.performClick(View.java:5623) 在 android.view.View$PerformClick.run(View.java:22433) 在 android.os.Handler.handleCallback(Handler.java:751)在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6247) 在 java.lang。 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 处的reflect.Method.invoke(Native Method) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) * /
上面给出的是我录制音频文件的代码,它适用于 api 19 设备,但不适用于 api 24。你能帮我吗?
对于 API 级别 23 及以上,您必须在运行时请求 RECORD_AUDIO 权限。
查看此链接了解更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句