MediaRecorder does not save recording to a file

Viewed 78

I don't understand why it's doesn't working. I made a class "MediaRecorderHelper" in which I implemented the logic of the main functions of the MediaRecorder class. All necessary permissions are requested in MainActivity.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dimaf.voicediary">
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.VoiceDiary">
        <activity
            android:name=".presentation.MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.kt

package com.dimaf.voicediary.presentation

import android.Manifest
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.dimaf.voicediary.R
import com.dimaf.voicediary.databinding.ActivityMainBinding
import java.io.File

class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding
    val mediaRecorderHelper = MediaRecorderHelper()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        var filename = "${externalCacheDir?.absolutePath}/audiorecordtest.3gp"
        Toast.makeText(this, filename, Toast.LENGTH_LONG).show()

        binding.buttonStart.setOnClickListener {
            checkPermissions()
            Log.i("MyLog", "checked")
            mediaRecorderHelper.recorderStart(filename)
        }
        binding.buttonStop.setOnClickListener {
            mediaRecorderHelper.recorderStop()
            Toast.makeText(this, filename, Toast.LENGTH_LONG).show()

        }

    }
    private fun checkPermissions() {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            val permissions = arrayOf(
                android.Manifest.permission.RECORD_AUDIO,
                android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
                android.Manifest.permission.READ_EXTERNAL_STORAGE
            )
            ActivityCompat.requestPermissions(this, permissions, 0)
        }
    }

}

**MediaRecorderHelper.kt**

package com.dimaf.voicediary.presentation

import android.Manifest
import android.media.MediaRecorder
import android.util.Log
import android.widget.Toast

class MediaRecorderHelper  {
    private var recorder : MediaRecorder? = null

    fun recorderStart (name : String) {
        recorder = recorder?.apply {
            setAudioSource(MediaRecorder.AudioSource.MIC)
            setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
            setOutputFile(name)
            setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
            prepare()
            start()
            Log.i("MyLog", "Started")
        }
    }



    fun recorderReset () {
        recorder?.reset()
    }

    fun recorderStop () {
        recorder?.stop()
        recorder?.release()
        recorder = null
        Log.i("MyLog", "Stopped")
    }



}

I tried different folders in the **filename **variable in MainActivity, but it didn't work.

0 Answers
Related