Запустить аудиофайл при ответе на звонок - PullRequest
8 голосов
/ 18 июня 2011

Есть ли способ запустить аудиофайл при ответе на звонок, который будет воспроизводиться НЕ во время разговора (чтобы другая сторона могла слышать), а только в динамике вызова (чтобы слышала только наша сторона).

Звучит странно, я знаю, но это часть гораздо большего приложения.

Ответы [ 2 ]

1 голос
/ 27 ноября 2012

Прежде всего, вам нужно настроить BroadcastReceiver (назовем его «CallReceiver») и разрешение знать состояние телефона (интуитивно, разрешение на добавление составляет android.permission.READ_PHONE_STATE ).

Зарегистрируйте свое действие CallReceiver следующим образом.

<receiver android:name=".CallReceiver" android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE"></action>
    </intent-filter>
</receiver>

В CallReceiver вы можете решить, какие действия должны воспроизводить ваше аудио (входящие / исходящие / телефонные звонки ...), поэтому просто прочитайте EXTRA_STATE и getCallState () (посмотрите TelephonyManager документы).

Что касается аудио, вам нужно будет использовать AudioManager и установить режим воспроизведения "in call" перед воспроизведением звука.

private AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);  
am.setMode(AudioManager.MODE_IN_CALL); 
am.setSpeakerphoneOn(false);

Надеюсь, это поможет!

0 голосов
/ 13 мая 2016
  private void PlayShortAudioFileViaAudioTrack(String filePath) throws IOException {
 // We keep temporarily filePath globally as we have only two sample sounds now..
         if (filePath == null)
             return;

 //Reading the file..
         byte[] byteData = null;
         File file = null;
         file = new File(filePath); // for ex. path= "/sdcard/samplesound.pcm" or "/sdcard/samplesound.wav"
         byteData = new byte[(int) file.length()];
         FileInputStream in = null;
         try {
             in = new FileInputStream(file);
             in.read(byteData);
             in.close();

         } catch (FileNotFoundException e) {
 // TODO Auto-generated catch block
             e.printStackTrace();
         }
 // Set and push to audio track..
         int intSize = android.media.AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,
                 AudioFormat.ENCODING_PCM_8BIT);
         AudioTrack at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,
                 AudioFormat.ENCODING_PCM_8BIT, intSize, AudioTrack.MODE_STREAM);
         if (at != null) {
             at.play();
 // Write the byte array to the track
             at.write(byteData, 0, byteData.length);
             at.stop();
             at.release();
         } else
             Log.d("TCAudio", "audio track is not initialised ");
...