Use microphone in multiple app simultaneously in Android

后端 未结 1 755
难免孤独
难免孤独 2021-02-18 22:25

We have an Android device on which we would like to use the microphone in 2 app simultaneously.

In fact, we have a vocal command service that is running in

相关标签:
1条回答
  • 2021-02-18 23:07

    This scenario happens

    for instance

    when you want to record phone call. you can use the open source call recorder. see this and this

    Here is a code sample

    private MediaRecorder recorder = null;
    public void onCreate()
    {
        super.onCreate();
        recorder = new MediaRecorder();
        Log.i("CallRecorder", "onCreate created MediaRecorder object");
    }
    
    public void onStart(Intent intent, int startId) {
    
        if (isRecording) return;
    
        Context c = getApplicationContext();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
    
        Boolean shouldRecord = prefs.getBoolean(Preferences.PREF_RECORD_CALLS, false);
        if (!shouldRecord) {
            Log.i("CallRecord", "RecordService::onStartCommand with PREF_RECORD_CALLS false, not recording");
            return;
        }
    
        int audiosource = Integer.parseInt(prefs.getString(Preferences.PREF_AUDIO_SOURCE, "1"));
        int audioformat = Integer.parseInt(prefs.getString(Preferences.PREF_AUDIO_FORMAT, "1"));
    
        recording = makeOutputFile(prefs);
        if (recording == null) {
            recorder = null;
            return; //return 0;
        }
    
        Log.i("CallRecorder", "RecordService will config MediaRecorder with audiosource: " + audiosource + " audioformat: " + audioformat);
        try {
            // These calls will throw exceptions unless you set the 
            // android.permission.RECORD_AUDIO permission for your app
            recorder.reset();
            recorder.setAudioSource(audiosource);
            recorder.setOutputFormat(audioformat);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            recorder.setOutputFile(recording.getAbsolutePath());
            //recorder.setMaxDuration(msDuration); //1000); // 1 seconds
            //recorder.setMaxFileSize(bytesMax); //1024*1024); // 1KB
    
            recorder.setOnInfoListener(this);
            recorder.setOnErrorListener(this);
    
            try {
                recorder.prepare();
            } catch (java.io.IOException e) {
                Log.e("CallRecorder", "RecordService::onStart() IOException attempting recorder.prepare()\n");
                t.show();
                recorder = null;
                return;
            }
            Log.d("CallRecorder", "recorder.prepare() returned");
    
            recorder.start();
            isRecording = true;
            Log.i("CallRecorder", "recorder.start() returned");
            updateNotification(true);
        } catch (java.lang.Exception e) {
            Log.e("CallRecorder", "RecordService::onStart caught unexpected exception", e);
            recorder = null;
        }
    
        return;
    }
    
    0 讨论(0)
提交回复
热议问题