2

我今天试图找出我桌子上的一个错误。我还没有为 java/android 开发太多东西,但无论如何我都在尝试解决这个问题。

我有一个退出的同事开发的 android 应用程序。目前该应用程序在 2.2 中运行。但是当使用 2.3 运行它时,应用程序会失败。

它是一款帮助在电信公司交换机内转接电话的应用程序。

所以发生的事情是这样的。

人员 A(内部号码 001)接到 X 先生的电话。人员 A 接听并说您好,人员 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 中,我得到了以下堆栈跟踪。

/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是否阻止了移动交换机的功能?

编辑:这个错误只影响谷歌疯狂的“香草”安卓手机。HTC三星没有!确诊病例:Nexus S

4

3 回答 3

3

我认为问题在于PhoneUtils(引发异常)已经有一个非空闲的正在进行的呼叫。如果您查看 PhoneUtils 的来源(例如这里:http ://hi-android.info/src/com/android/internal/telephony/gsm/GsmCallTracker.java.html )并搜索异常“无法拨入当前state" 你会看到抛出这个异常的条件是有一个活动的调用。因此,您必须先将活动呼叫置于保持状态,然后再启动新呼叫。

我不知道为什么它曾经在 2.2 中工作并且在 2.3 中不会,但我想他们已经改变了一些处理呼叫的方式。

于 2011-05-05T13:18:04.487 回答
1

这里抛出异常。正如该拨号功能的 Javadoc所描述的,CallStateException如果当前无法进行新的拨出呼叫,因为不存在更多呼叫槽或存在正在拨号、提醒、响铃或等待的呼叫”。在您的示例中,听起来好像对人 B 的呼叫仍在响铃,因此无法再拨打新呼叫。

似乎CallManager该类在 2.2 中不存在,尽管没有进一步的研究,我无法确定它的位置是什么(以及为什么现在不允许这种同时调用)。

于 2011-05-05T13:09:32.113 回答
0

这个错误只影响谷歌疯狂的“香草”安卓手机。HTC三星没有!确诊病例:Nexus S

于 2011-10-21T14:28:56.963 回答