[英]Audio recording in Android (with kotlin)
我正在開發一個試用應用程序來在 Android(使用 kotlin)中進行錄音。
這是我目前遇到的問題。
在以下代碼中:
recordBtn.setOnClickListener {
if (applicationContext.checkSelfPermission(
Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
val permissions = arrayOf(android.Manifest.permission.RECORD_AUDIO)
ActivityCompat.requestPermissions(this, permissions,0)
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
startRecording()
}
}
}
startRecording() function 沒有被執行,因為: Build.VERSION.SDK_INT = 28和Build.VERSION_CODES.S = 31如果我刪除測試以強制執行startRecording() ,那么正如人們所料,應用程序崩潰.
我的問題是:我該怎么做才能至少在我自己的設備上擁有更高的 Build.VERSION.SDK_INT?
我為在網上找到答案所做的研究並沒有讓我得到明確的答案。
此處允許進一步評論是包含 startRecording() function 的代碼:
@SuppressLint("RestrictedApi")
@RequiresApi(Build.VERSION_CODES.S)
private fun startRecording() {
//isRecording = true
stopBtn.isEnabled = true
playBtn.isEnabled = false
recordBtn.isEnabled = false
val theAudioFile = File(getFilesDir(), "Audio_Record_File")
mediaRecorder = MediaRecorder(applicationContext).apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
setOutputFile(theAudioFile)
setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
try {
prepare()
} catch (e: IOException) {
Log.e(LOG_TAG, "prepare() failed")
}
start()
}
}
首先你應該看看這里: https://developer.android.com/reference/android/media/MediaRecorder
如您所見,僅在 API 31 中添加了構造函數public MediaRecorder (Context context)
。
您可以嘗試對低於 31 的 API 使用已棄用的構造函數,如下所示:
val mediaRecorder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
MediaRecorder(applicationContext)
} else {
MediaRecorder()
}.apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
setOutputFile(theAudioFile.path)
setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
try {
prepare()
} catch (e: IOException) {
}
start()
}
並在調用 startRecording 之前刪除您的@RequiresApi(Build.VERSION_CODES.S)
注釋和if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.