2012-04-18 106 views
0

我試圖彈出一個吐司消息,只要電話響起,並摧毀他們的電話被拒絕或回答。吐司消息android

OnReceive方法我有這樣的事情:

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(); 
    } 
} 

的問題是,呼叫被掛起來後連敬酒消息保持坡平了。這就像狀態永遠不會處於HANG_UP或IDLE模式。

我做錯了什麼?

+0

使用別的東西popupwindow,對話框.. – MKJParekh 2012-04-18 10:47:20

回答

0

在收到您的使用廣泛投recievere這

@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 2012-04-18 10:03:44

+0

c是類的對象,更多請參閱http://developer.android.com/reference/java/lang/Class.html – vipin 2012-04-18 10:07:04

+0

你不能只是做Class c = tm.getClass(); ? – Urho 2012-04-18 11:28:51

0

這是吐司功能的錯誤使用。你應該找到另一種方式去做任何你想做的事情。

我認爲最符合您需要的是PopupWindow。查看文檔。

+0

爲什麼是錯誤的用法? pupupwindows做什麼? – user1222905 2012-04-18 10:04:14

+0

Toast將在預定義的持續時間內顯示,即LENGTH_LONG或SHORT ..您需要事先定義持續時間。 – Ronnie 2012-04-18 10:22:23

+0

我猜RINGING廣播多次發送,你的Toast排隊等候。其中一人被取消,其餘人員繼續顯示全部時間... – Ronnie 2012-04-18 10:25:52