#java #android #file #kotlin #mediarecorder
#java #Android #файл #kotlin #mediarecorder
Вопрос:
Новичок в Kotlin. Пытаюсь сохранить аудиозапись в хранилище. В настоящее время я застрял при попытке использовать MediaRecord.setOutputFile (имя файла). Однако из-за этой ошибки происходит ошибка:
java.io.FileNotFoundException: /storage/emulated/0/Recording1.mp3: ошибка открытия: EPERM (операция не разрешена)
Итак, теперь я хотел бы создать File
перед вызовом setOutputFile, чтобы попытаться решить эту проблему. Но по какой-то причине Android Studio продолжает подчеркивать строку ниже, в которой говорится «Ожидается объявление верхнего уровня».
File fileval = File.createNewFile("blah.mp3"); //This is the line
Полный код:
package com.example.testapp.data
import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import android.media.MediaRecorder;
import android.os.Environment
import android.os.PersistableBundle
import com.example.testapp.R
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.media.MediaPlayer
import android.os.Build
import android.os.Environment.getDataDirectory
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.appcompat.widget.AppCompatButton
import java.io.File
import java.io.IOException
private const val LOG_TAG = "AudioRecordTest"
private const val REQUEST_RECORD_AUDIO_PERMISSION = 200
File fileval = File.createNewFile("blah.mp3"); //This is the line
public class RecordActivity : AppCompatActivity() {
private var mr: MediaRecorder? = null
private var recordbtn: Button? = null
private var filename: String? = null
private var state: Boolean = false
private var recordingStopped: Boolean = false
private var player: MediaPlayer? = null
private var playbtn: Button? = null
// Requesting permission to RECORD_AUDIO
private var permissionToRecordAccepted = false
private var permissions: Array<String> = arrayOf(Manifest.permission.RECORD_AUDIO)
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_record)
requestPermissions(permissions, REQUEST_RECORD_AUDIO_PERMISSION)
recordbtn = RecordButton(this)
playbtn = PlayButton(this)
filename = Environment.getExternalStorageDirectory().getAbsolutePath()
filename = "/Recording1.mp3"
mr = MediaRecorder()
mr?.setAudioSource(MediaRecorder.AudioSource.MIC)
mr?.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mr?.setOutputFile(filename)
mr?.setAudioEncoder(3) //AAC; need to review what the best choice here is.
mr?.prepare()
}
//more code...
}
Комментарии:
1. вы не используете kotlin там.
Ответ №1:
Вы используете синтаксис Java, а не синтаксис Kotlin. Это
val fileval: File = File.createNewFile("blah.mp3")
Комментарии:
1. Подождите, там написано «неразрешенная ссылка» для createNewFile
2. @whatwhat что этот метод не существует . Есть метод экземпляра:
createNewFile()
. Это то, что вы ищете? Если это так, вам нужно сначала создать экземплярFile
объекта, а затем вызвать метод для этого экземпляра.3. @Slaw Мне просто нужно сохранить аудиофайл на диск, но я новичок в Kotlin, поэтому я чертовски смущен.
4. @что это может помочь вам в просмотре kotlinlang.org/docs/reference
Ответ №2:
Используйте приведенный ниже код в AppCompatActivity()
fileName = "${externalCacheDir!!.absolutePath}/Recording1.3gp"
mr = MediaRecorder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
setOutputFile(fileName)
setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
try {
prepare()
} catch (e: IOException) {
Log.e(LOG_TAG, "prepare() failed")
}
start()
}