Gravação de chamada em segundo plano utilizando um serviço (Áudio sem show)

Tenho uma aplicação que rodar em segundo plano. Assim que o usuário abre a aplicação é iniciado um serviço, para gravar as chamadas e enviar para um determinada pasta.

Hoje o serviço identifica a chamada e grava, porém o áudio está ficando sem o show em alguns casos. Reparei que se eu abrir a app e fazer uma ligação grava certinho, porém se fecho a aplicação ou ela fica aberta por mais de 5 minutos, a gravação fica sem o show.

Segue o meu código:

package com.example.call;

public class BroadcastSistemas extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    try {
        String estado = intent.getStringExtra("state");
        String num = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        String msg = null;

        if (estado.equals("RINGING")) {
            msg = "O número " + num + " está chamando.";
        } else if (estado.equals("OFFHOOK")) {
            msg = "Em ligação.";
        } else if (estado.equals("IDLE")) {
            msg = "O número " + num + " desligou.";
        }

        Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

}

public class ServicoChamada extends Service {
MediaRecorder recorder;
File audiofile;
String name, phonenumber;
String audio_format;
public String Audio_Type;
int audioSource;
Context context;
private Handler handler;
Timer timer;
Boolean offHook = false, ringing = false;
Toast toast;
Boolean isOffHook = false;
private boolean recordstarted = false;

private static final String ACTION_IN = "android.intent.action.PHONE_STATE";
private static final String ACTION_OUT = "android.intent.action.NEW_OUTGOING_CALL";
private CallBr br_call;

public List<Worker> threads = new ArrayList<Worker>();

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Worker w = new Worker(startId);
    w.start();
    threads.add(w);

    final IntentFilter filter = new IntentFilter();
    filter.addAction(ACTION_OUT);
    filter.addAction(ACTION_IN);
    this.br_call = new CallBr();
    this.registerReceiver(this.br_call, filter);

    return (super.onStartCommand(intent, flags, startId));
}

class Worker extends Thread {
    public int count = 0;
    public int startId;
    public boolean ativo = true;

    public Worker(int startId) {
        this.startId = startId;

    }

    public void run() {
    }
}

public class CallBr extends BroadcastReceiver {
    Bundle bundle;
    String state;
    String inCall, outCall;
    public boolean wasRinging = false;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION_IN)) {
            if ((bundle = intent.getExtras()) != null) {
                state = bundle.getString(TelephonyManager.EXTRA_STATE);
                if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                    inCall = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
                    wasRinging = true;
                    Toast.makeText(context, "IN : " + inCall, Toast.LENGTH_LONG).show();
                } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
                    Toast.makeText(context, "ANSWERED", Toast.LENGTH_LONG).show();

                    String out = new SimpleDateFormat("dd-MM-yyyy hh-mm-ss").format(new Date());
                    File sampleDir = new File(Environment.getExternalStorageDirectory(), "/TestRecordingDasa1");
                    if (!sampleDir.exists()) {
                        sampleDir.mkdirs();
                    }
                    String file_name = "Record";
                    try {
                        audiofile = File.createTempFile(file_name, ".amr", sampleDir);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    String path = Environment.getExternalStorageDirectory().getAbsolutePath();

                    recorder = new MediaRecorder();

                    recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    recorder.setOutputFile(audiofile.getAbsolutePath());
                    try {
                        recorder.prepare();
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    recorder.start();
                    recordstarted = true;
                } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
                    wasRinging = false;
                    Toast.makeText(context, "REJECT || DISCO", Toast.LENGTH_LONG).show();
                    if (recordstarted) {
                        recorder.stop();
                        recordstarted = false;
                    }
                }
            }
        } else if (intent.getAction().equals(ACTION_OUT)) {
            if ((bundle = intent.getExtras()) != null) {
                outCall = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
                Toast.makeText(context, "OUT : " + outCall, Toast.LENGTH_LONG).show();
            }
        }
    }
}

}

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = new Intent(MainActivity.this, ServicoChamada.class);    
    startService(intent);
}

}

<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <service
        android:name="ServicoChamada"
        android:exported="false"
        android:label="ServicoChamada" >
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </service>

    <receiver
        android:name="BroadcastSistemas"
        android:label="BroadcastSistemas" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>
</application>