Запись звонков в Android почему это не работает

Я запускаю службу из MainActivity, которая запускается на неопределенный срок для поиска входящих и исходящих звонков для записи.

Почему этот образец "switch-case" не работает?

Ошибка не возникает, но я могу записывать только каждое из входящих и исходящих.

Служба убита после записи звонка, она будет воссозданаSTART_STICKY но никогда не начну.

Пожалуйста помоги. Заранее спасибо!

Есть ли другие коды для записи входящих и исходящих звонков в Android?

package com.exampled.demoserv;

import java.io.File;
import java.io.IOException;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;


public class ParentalService extends Service 
{
    @Override
    public void onCreate()
    {
        //Toast.makeText(getApplicationContext(), "Service Created", Toast.LENGTH_SHORT).show();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        // TODO Auto-generated method stub
        //Toast.makeText(getApplicationContext(), "Subu's Monitoring sTARTED", Toast.LENGTH_SHORT).show();
        startMonitor();
        return START_STICKY_COMPATIBILITY;
    }

    @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "Service Binded", Toast.LENGTH_SHORT).show();
        return null;
    }

    @Override
    public void onDestroy()
    {
        // TODO Auto-generated method stub
        super.onDestroy();
        Toast.makeText(getApplicationContext(), "Destroyed", Toast.LENGTH_SHORT).show();
    }

    public void startMonitor() 
    {
        TelephonyManager mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        mTelephonyMgr.listen(new TeleListener(), PhoneStateListener.LISTEN_CALL_STATE);
    }

    class TeleListener extends PhoneStateListener
    {
        boolean recording = false;
        final MediaRecorder recorder = new MediaRecorder();
        String inc_num="", fname;

        public void onCallStateChanged(int state, String incomingNumber) throws IllegalStateException
        {
            super.onCallStateChanged(state, incomingNumber);

            switch (state) {
                case TelephonyManager.CALL_STATE_IDLE:
                    //CALL_STATE_IDLE;
                    Toast.makeText(getApplicationContext(), "CALL_STATE_IDLE : "+Boolean.toString(recording), Toast.LENGTH_SHORT).show();

                    if(recording==true)
                    {
                        recorder.stop();
                        recorder.reset();
                        recorder.release();
                        Toast.makeText(getApplicationContext(), "Released_idle", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Toast.makeText(getApplicationContext(), Boolean.toString(recording)+" : Offhook",Toast.LENGTH_SHORT).show();

                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);   
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

                    String file= Environment.getExternalStorageDirectory().toString();
                    String filepath= file+"/111111111111Aandroid_Subui";
                    File dir= new File(filepath);
                    dir.mkdirs();

                    if(inc_num.length()==0)
                    {
                        fname="outgoingNum";
                    }

                    filepath+="/"+fname+".3gp";
                    recorder.setOutputFile(filepath);

                    try {
                        recorder.prepare();
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                    e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    recorder.start();  
                    recording=true;
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    //CALL_STATE_RINGING
                    inc_num = incomingNumber;
                    Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING : "+incomingNumber, Toast.LENGTH_SHORT).show();
                    break;
                default:
                    Toast.makeText(getApplicationContext(), "Default reached", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос