2011-05-02 64 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