我有一个由退出的同事开发的Android应用程序。目前该应用程序在2.2中运行。但是当用2.3运行它时,应用程序失败了。
它的应用程序可以帮助在telecompany交换机内进行转移调用。
所以会发生这种情况。
A人(内部编号001)接到X先生的电话。 人A答案和sais嗨是的人B(内部编号002)对这个问题有很好的了解!让我把你转移给他!
A人然后在他的手机上拨打002并等待大约10(足够长时间让呼叫通过并开始下沉)然后再拨打第4号电话(内部电信公司转移命令)将MR.X转移到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我得到以下stacktrace。
/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是否阻止了移动交换机的功能?
编辑:这个bug只会影响谷歌疯狂的“香草”手机。 HTC三星没有它!确认案例:Nexus S答案 0 :(得分:3)
我认为问题是PhoneUtils(抛出异常)已经有一个非空闲的持续呼叫。如果您查看PhoneUtils的来源(例如:http://hi-android.info/src/com/android/internal/telephony/gsm/GsmCallTracker.java.html)并搜索异常“无法拨入当前状态”,您将看到抛出此异常的条件是存在活动呼叫。 因此,您必须先将当前通话置于保持状态,然后启动新通话。
我不知道为什么它曾经在2.2中使用过,而且它不会在2.3中,但我想它们已经改变了一些处理调用的方式。
答案 1 :(得分:1)
异常被抛出here。正如dial function描述的Javadoc所示,如果当前无法进行新的拨出呼叫,则CallStateException
将被抛出“,因为不再存在呼叫时隙或存在拨号,提醒,振铃,或等待“。听起来好像,在你的例子中,对人B的呼叫仍然响起,因此无法再拨打新的电话。
似乎2.2中没有CallManager
类,但是如果没有进一步的研究,我无法确定它的位置是什么(为什么现在不允许这样的同时调用)。
答案 2 :(得分:0)
这个bug只会影响谷歌疯狂的“香草”手机。 HTC三星没有它!确认案例:Nexus S