Регистратор Работает впервые, затем записывает только 3 секунды - PullRequest
0 голосов
/ 12 июля 2020

В этом коде всякий раз, когда я сначала устанавливаю приложение, оно работает правильно, но когда я использовал его несколько раз для записи звонков, он не работает должным образом, он записывает только звук в течение 3 секунд. Поэтому я хотел бы знать, в чем ошибка i Пожалуйста, дайте мне знать, если что-то не так. Звук записывается правильно, но после этого аудиофайл содержит только 3 секунды звука.

public class MyPhoneStateListener extends PhoneStateListener {

    private static int lastState = TelephonyManager.CALL_STATE_IDLE;
    private static Date callStartTime;
    private static boolean isIncoming;
    private static boolean status;
    MediaRecorder media;

    private void startrecorder(boolean status) {
       if(status) {
           media = new MediaRecorder();
           String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/"
                   + UUID.randomUUID().toString() + "record.3gp";
           media.setAudioSource(MediaRecorder.AudioSource.MIC);
           media.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
           media.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
           media.setOutputFile(path);
           try {
               media.prepare();
               media.start();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
       else{
           media.stop();

       }
    }



    public void onCallStateChanged(Context context, int state, String phoneNumber){

        if(lastState == state){
//No change, debounce extras
            return;
        }

        System.out.println("Number inside onCallStateChange : "  + phoneNumber);
        
        switch(state){
            case TelephonyManager.CALL_STATE_RINGING:
                isIncoming = true;
                callStartTime = new Date();
                startrecorder(true);

                Toast.makeText(context, "Incoming Call Ringing " + phoneNumber, Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:

                if(lastState != TelephonyManager.CALL_STATE_RINGING){
                    isIncoming = false;
                    startrecorder(true);
                    callStartTime = new Date();
                    Toast.makeText(context, "Outgoing Call Started " + phoneNumber, Toast.LENGTH_SHORT).show();
                }
                break;

            case TelephonyManager.CALL_STATE_IDLE:
//Went to idle-  this is the end of a call.  What type depends on previous state(s)
                startrecorder(false);
                if(lastState == TelephonyManager.CALL_STATE_RINGING){
//Ring but no pickup-  a miss
                    Toast.makeText(context, "Ringing but no pickup" + phoneNumber + " Call time " + callStartTime +" Date " + new Date() , Toast.LENGTH_SHORT).show();
                }
                else if(isIncoming){
                    Toast.makeText(context, "Incoming " + phoneNumber + " Call time " + callStartTime  , Toast.LENGTH_SHORT).show();

                }
                else{

                    Toast.makeText(context, "outgoing " + phoneNumber + " Call time " + callStartTime +" Date " + new Date() , Toast.LENGTH_SHORT).show();

                }

                break;
        }
        lastState = state;
    }
}

1 Ответ

0 голосов
/ 19 июля 2020

Для видео обычно существует массив блобов, не знаю, чем отличается эта реализация, так как я не вижу массива. Попробуйте использовать media.start(100);, это может сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...