如何解决为什么我不能在Kotlin中创建文件对象?
科特林的新手。尝试将录音保存到存储中。我目前无法尝试使用MediaRecord.setOutputFile(filename)。但是,由于此错误,它正在出错:
java.io.FileNotFoundException:/storage/emulated/0/Recording1.mp3:打开失败:EPERM(不允许操作)
因此,现在我想在调用setOutputFile尝试解决此问题之前创建一个File
。但是出于某些原因,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...
}
解决方法
您使用的是Java语法,而不是Kotlin语法。是
val fileval: File = File.createNewFile("blah.mp3")
,
在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()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。