2012-04-18 8 views
0

전화가 울리면 토스트 메시지를 팝업으로 표시하고 토스트를 파괴하여 통화가 거부되거나 답변됩니다.토스트 메시지 android

Bundle bundle=intent.getExtras(); 
final String state=bundle.getString(TelephonyManager.EXTRA_STATE); 

if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) 
{ 
    Toast toast= new Toast(context); 
    toast.show(); 

    new CountDownTimer(3500,1000) 
{ 

@Override 
public void onFinish() 
{ 
    if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)|| 
    (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) 
    { 
    toast.cancel(); 
    } 
    else 
    { 
    toast.setDuration(Toast.LENGTH_LONG); 
    toast.show(); 
    start(); 
    } 
} 

문제는 통화가 교수형 후에도 토스트 메시지가 저런 애 유지한다는 것이다 다음 OnReceive 방법에서

나는 이런 식으로 뭔가가있다. 상태가 절대로 HANG_UP 또는 IDLE 모드에 있지 않은 것과 같습니다.

내가 뭘 잘못 했니? 를 받게되며 사용에 대한 귀하의 폭 넓은 캐스트 recievere에서

+0

다른 팝업창을 사용하십시오 ... – MKJParekh

답변

0

@Override 
      public void onReceive(Context context, Intent intent) { 
       Log.d("INCOMING", "service start"); 
       TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
       try { 
       Class c = Class.forName(tm.getClass().getName()); 
       Method m = c.getDeclaredMethod("getITelephony"); 
       m.setAccessible(true); 
       // telephonyService = (ITelephony) m.invoke(tm); 
       Bundle bundle = intent.getExtras(); 
       String phoneNumber = bundle.getString("incoming_number"); 

       Log.d("INCOMING", phoneNumber); 

       if ((phoneNumber != null) && !phoneNumber.equals(selectedtednumber)) { 
        Toast.makeText(context, "Someone other calling sending to voice mail ...", Toast.LENGTH_LONG).show(); 
        sendToVoiceMail(); 
       } 
} 
+0

나는 이해하지 못합니다. 클래스 C 란 무엇입니까? 이 코드는 무엇을하고 있습니까? – user1222905

+0

c 클래스에 대한 자세한 내용은 다음을 참조하십시오. http://developer.android.com/reference/java/lang/Class.html – vipin

+0

클래스 c = tm.getClass(); ? – Urho

0

이는 토스트 기능의 잘못된 사용입니다. 당신이하려는 일을하는 또 다른 방법을 찾아야합니다.

귀하의 필요에 가장 가까운 것은 PopupWindow입니다. 설명서를 확인하십시오.

+0

왜 잘못 사용하나요? 응원단은 무엇을하나요? – user1222905

+0

토스트는 미리 정의 된 기간 (즉, LENGTH_LONG 또는 SHORT) 동안 표시됩니다. 이전에 기간을 정의해야합니다. – Ronnie

+0

RINGING 방송이 여러 번 전송되고 토스트가 대기하고있는 것 같습니다. 그들 중 하나가 취소되고 나머지는 전체 기간 동안 계속 표시됩니다 ... – Ronnie

관련 문제