2011-05-02 60 views
2

我試圖找出今天我桌上的一個bug。我沒有爲java/android開發太多,但我試圖找出這個問題。Android調用撥號

我有一個已退出的同事開發的android應用程序。目前該應用程序在2.2中運行。但是,在2.3下運行應用程序失敗。

它的一個應用程序,可以幫助在電信公司交換機內傳輸呼叫。

所以會發生什麼呢。

Person A(內部編號001)接收Mr Mr。 Person A答案和sais嗨Yeah Person B(內部編號002)對這個問題有很大的瞭解!讓我把你轉移給他!

A然後在他的手機上呼叫002,並等待約10(足夠長的時間讓呼叫通過並開始損壞),然後再撥打4號(內部電信轉接命令)將MR.X傳送給Person B.

這簡而言之就是應用程序通過點擊列表中的某個人而完成的工作。

首先呼叫人B,延時10 SEK呼叫號碼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 
[email protected] (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 
[email protected] 
D/dalvikvm( 125): GC_CONCURRENT freed 255K, 51% free 2844K/5767K, external 2219 
K/2674K, paused 6ms+94ms 

所以我想問一下,在我把這麼多小時放在這個問題上之前,是否有一個簡單的解決方案來解決這個問題?

謝謝!

編輯:我甚至嘗試過手動執行這個程序(接受一個包含呼叫,擱置,呼叫同事,再次呼叫數字4轉移它)同樣的錯誤,應用程序獲取。那麼android是否阻止了移動交換機的functinallity?

編輯:此錯誤隻影響谷歌的「香草」Android手機。 HTC三星沒有它!確認案例:Nexus S

+0

您確定它在android 2.2中可用嗎?因爲只有當傳入/傳出的呼叫數大於2時纔會出現此問題...再次對照2.2檢查並讓我們知道.. 。 – Dinash 2011-05-05 13:10:09

+0

它在anroid 2.2中有效,我們有一個工作應用程序,人們正在使用它,只有2.3的人無法訪問它。 – Anders 2011-05-06 06:34:29

+0

什麼都沒有? :((((( – Anders 2011-05-12 07:54:27

回答

3

我認爲問題是PhoneUtils(引發異常)已經有一個不閒置的正在進行的呼叫。如果你看看PhoneUtils的來源(例如這裏:http://hi-android.info/src/com/android/internal/telephony/gsm/GsmCallTracker.java.html),並搜索「無法在當前狀態下撥號」的例外情況,您將看到發生此異常的條件是存在活動呼叫。 因此,您必須首先將當前通話置於保持狀態,然後啓動新通話。

我不知道爲什麼它曾經在2.2中工作,它不會在2.3,但我想他們已經改變了一些調用處理的方式。

+0

Okey這是我發現了,但還沒有找到解決這個問題的方法..我會如何着手在呼叫轉移號碼之前,人員b保持呼叫? – Anders 2011-05-06 06:32:55

1

正在拋出異常here。如dial function的Javadoc所述,如果由於沒有更多的呼叫時隙或存在正在撥號,警告,振鈴或正在等待的呼叫,因此當前不能進行新的呼出時,CallStateException被拋出「」。聽起來好像在你的例子中,對Person B的呼叫仍在振鈴,因此不能再撥打新的呼叫。

似乎在2.2中不存在CallManager類,儘管沒有進一步的研究,我不能確定代替它的地方(以及爲什麼現在不允許這樣的同時呼叫)。

+0

嗨是的我已經發現了這個,但我將如何解決這個問題?它甚至有可能嗎? – Anders 2011-05-06 06:33:55

0

此錯誤僅影響谷歌的「香草」Android手機。 HTC三星沒有它!已確認案例:Nexus S