2015-11-26 5 views
2

У меня есть код приложения звуковой записи, основанный на состоянии микрофона. Я хочу отобразить такой статус, как: если микрофон уже используется каким-либо другим приложением, для отображения статуса, как микрофон, уже используется для записи другого типа ... поэтому я использовал приведенный ниже код, чтобы получить состояние микрофона в рекордере. getRecordingState(), но он всегда возвращает 1, даже если я нахожусь в режиме ожидания или в режиме ожидания. Помогите мне получить код, чтобы получить состояние микрофона. Заранее спасибо.Android - Как проверить микрофон в настоящее время используется каким-либо другим приложением

int[] mSampleRates = new int[]{8000, 11025, 22050, 44100}; 

    for (int rate : mSampleRates) { 
     for (short audioFormat : new short[]{AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT}) { 
      for (short channelConfig : new short[]{AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO}) { 
       try { 
        Log.d(TAG, "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: " 
          + channelConfig); 
        int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat); 
     if (bufferSize != AudioRecord.ERROR_BAD_VALUE) { 
         // check if we can instantiate and have a success 
         AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize); 

         if (recorder.getState() == AudioRecord.STATE_INITIALIZED) { 

          Log.i("", "Recorder intialised " + recorder.getRecordingState() + " " + recorder.getState() + " "); 
          return recorder; 
         } 
        } 
       } catch (Exception e) { 
        Log.e(TAG, rate + "Exception, keep trying.", e); 
       } 
      } 
     } 
    } 

     return null; 
+0

Посмотрите в эту http://stackoverflow.com/questions/12018927/check-if-android-mic-is-being-used-by-another-app – Sunny

+0

Благодаря солнечно, я не имею представления о HAL, Не могли бы вы помочь мне получить статус с уровня приложения – user2750213

ответ

0

Как указано в getRecordingState, этот метод только проверяет, является ли состояние финализации для текущего экземпляра. Если вы хотите узнать, используется ли в данный момент микрофон для вызова, вы должны использовать AudioManager.

+0

Спасибо valentin, Можете ли вы поделиться некоторым примером кода, чтобы получить его. – user2750213

+0

У меня нет образца кода, готового для этого, так как это было только из исследования по ссылке. Сожалею. –

+0

Хорошо, спасибо. – user2750213

1

Привет, я нашел частичный ответ. Если микрофон используется приложением телефона (CALL), мы можем получить режим (2 = в режиме вызова, 0 = нормальный режим). Если микрофон используется каким-либо другим приложением, не знаете, как его найти. веселит

AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
am.getMode();