Android Transfer Call - PullRequest
       7

Android Transfer Call

2 голосов
/ 02 мая 2011

Сегодня я пытаюсь выяснить ошибку на моем столе.Я не очень разработал для Java / Android, но я все равно пытаюсь понять это.

У меня есть приложение для Android, разработанное сотрудником, который ушел.В настоящее время приложение работает в 2.2.Но при запуске с 2.3 приложение перестает работать.

Это приложение, которое помогает с переадресацией вызовов внутри коммутатора телекомпании.

Так что же происходит?

Человек А(внутренний номер 001) получает звонок от г-на Х. Лицо А отвечает и говорит: Привет, да. Лицо Б (внутренний номер 002) прекрасно знает эту проблему!Позвольте мне перевести вас к нему!

Человек А затем звонит 002 на свой мобильный телефон и ждет около 10 (достаточно долго, чтобы звонок прошел и начал работать в режиме ожидания), а затем делает еще один звонок на номер 4 (внутренняя передача телекомпании).команда) для передачи MR.X лицу B.

Это коротко, что приложение делает, просто нажав человека в списке.

Первый звонок Человек B, задержка 10 сек номер4.

//Initial Call(002)
public void callNumber(String callnum){
    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:"+callnum));
    startActivity(intent);

    if(isAutomaticTransfer && stateString.equals("Off Hook")){
        _initTask = new InitTask();
        _initTask.execute( this );
    }
}

, а затем

protected class InitTask extends AsyncTask<Context, Integer, Integer>{
    @Override
    protected Integer doInBackground(Context... arg0) {

        try {
            Thread.sleep(delayLength);
            Intent intentTransfer = new Intent(Intent.ACTION_CALL);
            intentTransfer.setData(Uri.parse("tel:" + transfernum));
            intentTransfer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            startActivity(intentTransfer);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}

Как указано, это работает с 2.2.

Однако с 2.3 я получаю следующую трассировку стека.

/ActivityManager(   61): Starting: Intent { act=android.phone.extra.NEW_CALL_IN
TENT dat=tel:xxx-xxx-xxxx flg=0x10000000 cmp=com.android.phone/.SipCallOptionHan
dler (has extras) } from pid 123
V/SipCallOptionHandler(  123): Call option is SIP_ADDRESS_ONLY
I/ActivityManager(   61): Starting: Intent { act=android.intent.action.CALL dat=
tel:xxx-xxx-xxxx flg=0x10000000 cmp=com.android.phone/.InCallScreen (has extras)
} from pid 123
D/CallManager(  123): hasBgCall: false sameChannel:true
D/dalvikvm(  123): GC_CONCURRENT freed 305K, 48% free 3199K/6151K, external 6585
K/6853K, paused 14ms+5ms
D/dalvikvm(   61): GREF has increased to 401
D/dalvikvm(  123): GC_EXTERNAL_ALLOC freed 8K, 49% free 3191K/6151K, external 59
27K/6853K, paused 63ms
W/InputManagerService(   61): Starting input on non-focused client com.android.i
nternal.view.IInputMethodClient$Stub$Proxy@40530dd8 (uid=10035 pid=343)
D/dalvikvm(  130): GC_EXPLICIT freed 135K, 50% free 2949K/5895K, external 5959K/
7152K, paused 75ms
I/ActivityManager(   61): Starting: Intent { act=android.intent.action.CALL dat=
tel:xxx-xxx-xxxx flg=0x10000000 cmp=com.android.phone/.OutgoingCallBroadcaster }
from pid 343
D/PhoneUtils(  123): checkAndCopyPhoneProviderExtras: some or all extras are mis
sing.
D/PhoneUtils(  123): checkAndCopyPhoneProviderExtras: some or all extras are mis
sing.
I/ActivityManager(   61): Starting: Intent { act=android.phone.extra.NEW_CALL_IN
TENT dat=tel:xxx-xxx-xxxx flg=0x10000000 cmp=com.android.phone/.SipCallOptionHan
dler (has extras) } from pid 123
V/SipCallOptionHandler(  123): Call option is SIP_ADDRESS_ONLY
I/ActivityManager(   61): Starting: Intent { act=android.intent.action.CALL dat=
tel:xxx-xxx-xxxx flg=0x10000000 cmp=com.android.phone/.InCallScreen (has extras)
} from pid 123
W/PhoneUtils(  123): Exception from phone.dial()
W/PhoneUtils(  123): com.android.internal.telephony.CallStateException: cannot d
ial in current state
W/PhoneUtils(  123):    at com.android.internal.telephony.CallManager.dial(CallM
anager.java:704)
W/PhoneUtils(  123):    at com.android.phone.PhoneUtils.placeCall(PhoneUtils.jav
a:539)
W/PhoneUtils(  123):    at com.android.phone.InCallScreen.placeCall(InCallScreen
.java:2667)
W/PhoneUtils(  123):    at com.android.phone.InCallScreen.internalResolveIntent(
InCallScreen.java:1188)
W/PhoneUtils(  123):    at com.android.phone.InCallScreen.onNewIntent(InCallScre
en.java:1126)
W/PhoneUtils(  123):    at android.app.Instrumentation.callActivityOnNewIntent(I
nstrumentation.java:1119)
W/PhoneUtils(  123):    at android.app.ActivityThread.deliverNewIntents(Activity
Thread.java:1722)
W/PhoneUtils(  123):    at android.app.ActivityThread.performNewIntents(Activity
Thread.java:1734)
W/PhoneUtils(  123):    at android.app.ActivityThread.handleNewIntent(ActivityTh
read.java:1742)
W/PhoneUtils(  123):    at android.app.ActivityThread.access$2300(ActivityThread
.java:117)
W/PhoneUtils(  123):    at android.app.ActivityThread$H.handleMessage(ActivityTh
read.java:978)
W/PhoneUtils(  123):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/PhoneUtils(  123):    at android.os.Looper.loop(Looper.java:123)
W/PhoneUtils(  123):    at android.app.ActivityThread.main(ActivityThread.java:3
683)
W/PhoneUtils(  123):    at java.lang.reflect.Method.invokeNative(Native Method)
W/PhoneUtils(  123):    at java.lang.reflect.Method.invoke(Method.java:507)
W/PhoneUtils(  123):    at com.android.internal.os.ZygoteInit$MethodAndArgsCalle
r.run(ZygoteInit.java:839)
W/PhoneUtils(  123):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.ja
va:597)
W/PhoneUtils(  123):    at dalvik.system.NativeStart.main(Native Method)
W/InCallScreen(  123): placeCall: PhoneUtils.placeCall() FAILED for number '4'.
W/InCallScreen(  123): onNewIntent: status CALL_FAILED from internalResolveInten
t()
W/InputManagerService(   61): Window already focused, ignoring focus gain of: co
m.android.internal.view.IInputMethodClient$Stub$Proxy@406f3830
D/dalvikvm(  125): GC_CONCURRENT freed 255K, 51% free 2844K/5767K, external 2219
K/2674K, paused 6ms+94ms

Так что я подумал спросить, было ли простое решение этой проблемы, прежде чем я столько времени уделил этой проблеме?

Спасибо!

РЕДАКТИРОВАТЬ: я даже пытался сделать эторучная процедура (принятие входящего звонка, удержание, вызов сотрудника и повторный вызов цифры 4 для его передачи) та же ошибка, что и приложение.Так блокировал ли android функциональность мобильных коммутаторов?

РЕДАКТИРОВАТЬ: Эта ошибка касается только "ванильных" телефонов Android с ума от Google.У HTC Samsung его нет!Подтвержденный случай: Nexus S

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

Я думаю, что проблема в том, что PhoneUtils (который выдает исключение) уже имеет текущий вызов, который не находится в режиме ожидания.Если вы посмотрите на источник PhoneUtils (например, здесь: http://hi -android.info / src / com / android / internal / telephony / gsm / GsmCallTracker.java.html ) и выполните поиск исключения "не удается набрать номер в текущем состоянии "вы увидите, что условия для выдачи этого исключения состоят в том, что существует активный вызов.Поэтому вам нужно сначала поставить активный вызов на удержание, а затем инициировать новый.

Я не знаю, почему он работал в 2.2, а в 2.3 - нет, но я полагаю, что ониизменены некоторые способы обработки вызовов.

1 голос
/ 05 мая 2011

Исключение выдается здесь .Как описывает Javadoc для этой функции набора , CallStateException выбрасывается ", если новый исходящий вызов в настоящее время невозможен, потому что больше нет временных интервалов вызова или существует вызов, который набирает номер, оповещает, звонитили в ожидании".Звучит так, как будто в вашем примере звонок на Персона B все еще звонит, и поэтому новый вызов больше не может быть набран.

Похоже, что класс CallManager не существовал в 2.2, хотя безВ дальнейших исследованиях я не могу быть уверен, что стояло на его месте (и почему такие одновременные вызовы были разрешены, когда их сейчас нет).

0 голосов
/ 21 октября 2011

Эта ошибка затрагивает только "ванильные" телефоны Android с ума от Google.У HTC Samsung его нет!Подтвержденный случай: Nexus S

...