2011-05-02 3 views
2

오늘 내 테이블에 버그가있는 것을 알아 내려고 시도 중입니다. 나는 java/android를 위해 많은 것을 개발하지 못했지만 어쨌든 이것을 알아 내려고하고있다.Android 이전 호

나는 직장 동료가 개발 한 안드로이드 앱을 가지고있다. 현재 앱은 2.2에서 작동합니다. 그러나 2.3으로 실행하면 앱이 실패합니다.

telecompany 스위치 내에서 전화 걸기를 도와주는 앱입니다.

그래서 어떻게됩니까?

사람 A (내부 번호 001)는 Mr 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); 
    } 
} 

및 언급이 2.2에서 작동하는 것에

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.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 

그래서이 문제에 많은 시간을 투자하기 전에이 문제에 대한 간단한 해결책이 있는지 묻습니다.

감사합니다.

편집 : 나는이 절차를 수작업으로 수행하려고 시도했다. (incomming 호출을 사용하고, 보류 상태로두고, 동료에게 전화를 걸어서 숫자 4를 다시 전송하여 호출한다.) 앱과 동일한 오류가 발생한다. 그렇다면 안드로이드는 모바일 스위치 보드의 기능을 차단 했습니까?

편집 :이 버그는 Google에서 화를 낼 수있는 "바닐라"Android 휴대 전화에만 영향을줍니다. HTC 삼성 doesnt는 그것을 가지고있다! 확인 된 사례 : Nexus S

+0

안드로이드 2.2에서 정상적으로 작동합니까?이 문제는 송수신 전화가 둘 이상인 경우에만 발생하므로 ... 2.2에 대해 다시 확인하고 저희에게 알려주십시오 .. – Dinash

+0

그것은 2.2에서 작동합니다. 우리는 작업 응용 프로그램을 가지고 있고 사람들은 그것을 사용하고 있습니다. 2.3에 액세스 할 수없는 사람들 만 사용하고 있습니다. – Anders

+0

아무것도 없습니까? : ((((((( – Anders

답변

3

나는 문제는 PhoneUtils (예외를 throw 함)가 이미 유휴 상태가 아닌 통화를 계속하고 있다고 생각합니다. PhoneUtils의 소스를 보면 (예 :여기 : http://hi-android.info/src/com/android/internal/telephony/gsm/GsmCallTracker.java.html) 예외를 검색하면 "이 상태에서 전화를 걸 수 없습니다"라는 메시지가 표시되면이 예외를 발생시키는 조건은 활성 통화임을 나타냅니다. 먼저 활성 통화를 보류 한 다음 새 통화를 시작해야합니다.

2.2에서 작동하는 데 사용 된 이유는 모르지만 2.3에서는 그렇지 않습니다. 그러나 호출이 처리되는 방식을 일부 변경했다고 가정합니다.

+0

오키 이것은 내가 발견 한 것입니다. 그러나이 문제를 해결할 방법을 찾지 못했습니다. 어떻게해야할까요? 사람 b는 transfernumber를 부르기 전에 보류를 요청합니까? – Anders

1

예외는 here입니다. 그 dial function에 대한 Javadoc이 설명하는대로 은 ""이 더 이상 호출 슬롯이 없거나 다이얼링, 경고, 벨 울림 또는 대기 중의 호출이 있기 때문에 ""과 같이 새로운 발신 호출이 가능하지 않은 경우 throw됩니다. 예를 들어, 사용자 B에 대한 호출이 여전히 울리고 있으므로 새 호출에 더 이상 전화를 걸 수없는 것처럼 들립니다.

CallManager 클래스는 더 이상 연구하지 않아도 그 자리에 서있는 것이 무엇인지 (그리고 왜 지금 같은 호출이 허용되지 않았는지) 확신 할 수 없지만 2.2에 없었던 것으로 보입니다.

+0

안녕하세요. 이것도 알아 냈지만이 문제를 어떻게 해결할 수 있습니까? 심지어 가능합니까? – Anders

0

이 버그는 Google에서 미친 Android 휴대 전화에만 영향을줍니다. HTC 삼성 doesnt는 그것을 가지고있다! 확인 된 사례 : Nexus S