"\n<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\n xmlns:tools="http://schemas.android.com/tools"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n android:orientation="vertical"\n android:padding="16dp">\n\n <Button\n android:id="@+id/recordButton"\n android:layout_width="match_parent"\n android:layout_height="wrap_content"\n android:text="Record" />\n\n <Button\n android:id="@+id/playButton"\n android:layout_width="match_parent"\n android:layout_height="wrap_content"\n android:text="Play" />\n\n <androidx.recyclerview.widget.RecyclerView\n android:id="@+id/recyclerView"\n android:layout_width="match_parent"\n android:layout_height="0dp"\n android:layout_weight="1"\n tools:listitem="@android:layout/simple_list_item_1" />\n\n\n根据以上布局的xml代码,使用kotlin写一个录音功能,录音后文件保存在本地并在androidx.recyclerview.widget.RecyclerView中显示录音名称,单机后可播放音频,如果已有录制的音频文件,那么打开软件的时候androidx.recyclerview.widget.RecyclerView中默认显示内容:录音文件名称,并且可以播放音频。\n\n首先,我们需要添加相应的权限到AndroidManifest.xml文件中:\n\nxml\n<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n\n\n然后,我们需要创建一个录音管理类,用于控制录音的开始、停止和播放功能。创建一个名为"AudioRecorder.kt"的文件,并添加以下代码:\n\nkotlin\nimport android.media.MediaPlayer\nimport android.media.MediaRecorder\nimport android.os.Environment\nimport java.io.File\nimport java.io.IOException\n\nclass AudioRecorder {\n\n private var recorder: MediaRecorder? = null\n private var player: MediaPlayer? = null\n private var filePath: String? = null\n\n fun startRecording() {\n try {\n recorder = MediaRecorder()\n recorder?.setAudioSource(MediaRecorder.AudioSource.MIC)\n recorder?.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)\n recorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)\n filePath = getFilePath()\n recorder?.setOutputFile(filePath)\n recorder?.prepare()\n recorder?.start()\n } catch (e: IOException) {\n e.printStackTrace()\n }\n }\n\n fun stopRecording() {\n recorder?.stop()\n recorder?.release()\n recorder = null\n }\n\n fun startPlaying() {\n player = MediaPlayer()\n player?.setDataSource(filePath)\n player?.prepare()\n player?.start()\n }\n\n fun stopPlaying() {\n player?.release()\n player = null\n }\n\n private fun getFilePath(): String {\n val directory = File(Environment.getExternalStorageDirectory().absolutePath + \"/Recordings\")\n if (!directory.exists()) {\n directory.mkdirs()\n }\n return directory.absolutePath + \"/recording_${System.currentTimeMillis()}.3gp\"\n }\n}\n\n\n接下来,我们需要在MainActivity.kt文件中初始化RecyclerView和录音功能。打开MainActivity.kt文件,并添加以下代码:\n\nkotlin\nimport android.Manifest\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport kotlinx.android.synthetic.main.activity_main.*\nimport java.io.File\n\nclass MainActivity : AppCompatActivity() {\n\n private val audioRecorder = AudioRecorder()\n private val recordingsList = ArrayList<String>()\n private lateinit var adapter: RecordingsAdapter\n\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContentView(R.layout.activity_main)\n\n recyclerView.layoutManager = LinearLayoutManager(this)\n adapter = RecordingsAdapter(recordingsList, ::playRecording)\n recyclerView.adapter = adapter\n\n recordButton.setOnClickListener {\n if (isRecordingPermissionGranted()) {\n if (audioRecorder.isRecording) {\n audioRecorder.stopRecording()\n recordingsList.add(audioRecorder.filePath!!)\n adapter.notifyDataSetChanged()\n } else {\n audioRecorder.startRecording()\n }\n }\n }\n\n playButton.setOnClickListener {\n if (audioRecorder.isRecording) {\n audioRecorder.stopRecording()\n }\n audioRecorder.startPlaying()\n }\n\n loadRecordings()\n }\n\n private fun isRecordingPermissionGranted(): Boolean {\n if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n if (checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED &&\n checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED\n ) {\n return true\n } else {\n requestPermissions(\n arrayOf(\n Manifest.permission.RECORD_AUDIO,\n Manifest.permission.WRITE_EXTERNAL_STORAGE\n ), 0\n )\n return false\n }\n } else {\n return true\n }\n }\n\n private fun loadRecordings() {\n val directory = File(Environment.getExternalStorageDirectory().absolutePath + \"/Recordings\")\n if (directory.exists()) {\n val files = directory.listFiles()\n if (files != null) {\n for (file in files) {\n recordingsList.add(file.name)\n }\n adapter.notifyDataSetChanged()\n }\n }\n }\n\n private fun playRecording(position: Int) {\n if (audioRecorder.isRecording) {\n audioRecorder.stopRecording()\n }\n audioRecorder.filePath = Environment.getExternalStorageDirectory().absolutePath + \"/Recordings/${recordingsList[position]}\"\n audioRecorder.startPlaying()\n }\n}\n\n\n最后,我们需要创建一个名为"RecordingsAdapter.kt"的文件,并添加以下代码:\n\nkotlin\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.recyclerview.widget.RecyclerView\n\nclass RecordingsAdapter(\n private val recordingsList: ArrayList<String>,\n private val onItemClick: (Int) -> Unit\n) :\n RecyclerView.Adapter<RecordingsAdapter.ViewHolder>() {\n\n override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {\n val view =\n LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false)\n return ViewHolder(view)\n }\n\n override fun onBindViewHolder(holder: ViewHolder, position: Int) {\n holder.textView.text = recordingsList[position]\n holder.itemView.setOnClickListener { onItemClick(position) }\n }\n\n override fun getItemCount(): Int {\n return recordingsList.size\n }\n\n class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {\n val textView: TextView = itemView.findViewById(android.R.id.text1)\n }\n}\n\n\n现在,您可以运行应用程序并测试录音功能了。录制的音频文件将保存在"/Recordings"目录中,并显示在RecyclerView中,单击列表项将播放相应的音频文件。

Android 录音功能实现:使用 Kotlin、RecyclerView 和 MediaPlayer

原文地址: https://www.cveoy.top/t/topic/qaDt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录