Контекст:
Я занимаюсь разработкой полного телефонного приложения android, которое будет иметь все телефонные возможности по умолчанию и будет работать как телефонное приложение по умолчанию, как только пользователь решит, что оно будет телефонное приложение по умолчанию.
Результаты поиска по SO:
Я не нашел никаких потоков, специально предназначенных для отправки тонов DTMF в систему IVR посредством текущего вызова.
Функциональность, которую я реализую:
- Вызов продолжается (очевидно, только через мое приложение)
- Допустим, я позвонил номер центра
- Колл-центр просит меня выбрать язык, нажимая цифры от 1/2/3 до 9, *, #
- Я нажимаю нужную ди git. (Очевидно, с помощью моей программы дозвона)
- Мой дилаер способен генерировать
DTMF
звуки 0 - 9, * # через ToneGenerator
- Но ничего не происходит, поскольку колл-центр не получает мой ответ нажатыми цифрами .. !!
Мой код, который генерирует звуки DTMF:
public class Tone_Generator extends IntentService
{
private static int i = 0;
private static final int SLEEP_DURATION = 2000;
public Tone_Generator() {
super("Tone_Generator");
}
@Override
protected void onHandleIntent(Intent intent)
{
int key;
if (intent != null)
{
if (intent.hasExtra("tone"))
{
key = intent.getIntExtra("tone", 0);
play(key);
}
}
}
private void play(final int key)
{
Thread t = new Thread(new Runnable()
{
@Override
public void run()
{
ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_DTMF, 100);
try
{
switch(key)
{
case 0:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_0,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 1:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_1,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 2:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_2,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 3:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_3,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 4:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_4,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 5:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_5,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 6:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_6,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 7:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_7,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 8:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_8,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 9:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_9,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 11:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_S,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
case 12:
toneGenerator.startTone(ToneGenerator.TONE_DTMF_P,200);
Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
break;
}
Thread.sleep(SLEEP_DURATION);
toneGenerator.release();
}
catch (Exception e)
{
e.printStackTrace();
Log.d("TONE : ", " ON ERROR.. \n ");
}
finally
{
Log.d("TONE : ", " FINISHED.. \n ");
toneGenerator = null;
}
}
});
t.start();
}
}
Он идеально генерирует тоны от 0 до 9 и для * и # как телефон по умолчанию приложение все еще не может отправлять Interactive Voice Response
сигналы в вызываемый колл-центр
Это будет отличная помощь от других разработчиков, которые уже реализовали такие функции, заранее спасибо и любая помощь будет оценена.