java – Error al realizar grabación en segundo plano Android

Estoy intentando realizar una grabación de un audio de 15 segundos en segundo plano pero al llamar al método para detener la grabación me arroja un error en la app , mi clase esta extendida a un broadcats por que es para capturar los eventos del botón de apagado que me pude guiar

Codigo

public class ScreenReceiver extends BroadcastReceiver {
    private static int countPowerOff = 0;
    private static boolean TemporizadorActivo = false;
    private static boolean IniciarGrabacion = false;
    private MediaRecorder grabacion;
    private String archivoSalida = null;
    public ScreenReceiver ()
    {

    }

    @Override
    public void onReceive(Context context, Intent intent)
    {

        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF) || intent.getAction().equals(Intent.ACTION_SCREEN_ON))
        {
            Log.e("In on receive", "In Method:  ACTION_SCREEN_OFF");
            countPowerOff++;

            if(countPowerOff == 1 && TemporizadorActivo == false){
                InicializarContador();
            }

            if(countPowerOff>= 5){
                countPowerOff = 0;
                Log.e("In on receive", "In Method:  INGRESO SISISISI");
                Toast.makeText(context, "MAIN ACTIVITY IS BEING CALLED ", Toast.LENGTH_LONG).show();
                if(IniciarGrabacion == false) {
                    Log.e("In on receive", "In Method:  Iniciar Metodo Grabar");
                    IniciarGrabacion = true;
                    grabar();

                    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            grabar();
                            IniciarGrabacion = false;
                        }
                    }, 15000);
                }
              
            }

        }
     
    }

    private void InicializarContador(){
        TemporizadorActivo = true;
        Log.e("In on receive", "In Method:  INICIALIZAR TEMPORIZADOR");
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                TemporizadorActivo = false;
                if(countPowerOff<=4){
                    countPowerOff = 0;
                    Log.e("In on receive", "In Method:  INICIALIZAR A CONTADOR 0");
                }
            }
        }, 10000);

    }

    private void grabar(){
        if(grabacion == null){
            Log.e("In on receive", "In Method:  Iniciar Grabacion");
            String nombre = "AppEvaluacion_"+System.currentTimeMillis();
            archivoSalida = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AppEvalua"
                    + nombre + ".mp3";
            grabacion = new MediaRecorder();
            grabacion.setAudioSource(MediaRecorder.AudioSource.MIC);
            grabacion.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            grabacion.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
            grabacion.setOutputFile(archivoSalida);
            try{
                grabacion.prepare();
                grabacion.start();
                Log.e("In on receive", "In Method:  Iniciar Grabacion");
            }catch (Exception e){}
        }else{
            Log.e("In on receive", "In Method:  Terminar Grabacion");
            grabacion.stop();
            grabacion.release();
            grabacion = null;
        }
    }

}

Logcat de cuando ocurre mi error

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.guzman.appevaluacion, PID: 21322
java.lang.IllegalStateException
at android.media.MediaRecorder.stop(Native Method)
at com.guzman.appevaluacion.utils.ScreenReceiver.grabar(ScreenReceiver.java:121)
at com.guzman.appevaluacion.utils.ScreenReceiver.access$000(ScreenReceiver.java:15)
at com.guzman.appevaluacion.utils.ScreenReceiver$1.run(ScreenReceiver.java:53)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
I/Process: Sending signal. PID: 21322 SIG: 9 Disconnected from the
target VM, address: ‘localhost:58500’, transport: ‘socket’