0

我試圖讓我的應用程序在有未接電話時識別。我創建了一個BroadcastReceiver來檢測手機的狀態何時發生變化。這裏是我的onReceive()方法:Android檢測到未接來電

public void onReceive(Context context, Intent intent) { 
    boolean ringing = false, callReceived = false; 
    String callerPhoneNumber = ""; 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) { 
     ringing = true; 
     Bundle bundle = intent.getExtras(); 
     callerPhoneNumber= bundle.getString("incoming_number"); 

     if (ringing) { 
      Toast.makeText(context, "Phone call from: " + callerPhoneNumber, Toast.LENGTH_LONG).show(); 
     } 
    } 

    if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) { 
     callReceived = true; 
     Toast.makeText(context, "Call received.", Toast.LENGTH_LONG).show(); 
    } 

    if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) { 
//   Toast.makeText(context, "Phone is idle", Toast.LENGTH_LONG).show(); 

     if (ringing) { 
      Toast.makeText(context, "ringing is true", Toast.LENGTH_LONG).show(); 
     } 

//   if (ringing && !callReceived) { 
//    Toast.makeText(context, "It was A MISSED CALL from : " + callerPhoneNumber, Toast.LENGTH_LONG).show(); 
//   } 
    } 

我遇到的問題是應用程序檢測時,電話響起,設置ringingtrue,並顯示相應敬酒消息。但是,當電話狀態爲idle時,它不會輸入if (ringing)語句顯示ringing is true Toast消息。但是,如果我在其上方的敬酒信息中留言,它會正確打印Phone is idle

ringing是否有可能重置爲false電話振鈴和電話再次變爲空閒之間的某個地方?

回答

0

您不能在廣播接收器中存儲任何「狀態」信息。如果你想做一個比較舊的州/新州,我認爲你可以使用一項服務。

+0

確切的說,當onReceive被調用時它是一個新的實例,所以沒有以前的值保留。你可以在BroadcastReceiver調用 – Sulfkain

+0

之間保留這個偏好。謝謝,我把它作爲一個靜態變量,它現在運行良好。 – Jack

+2

我強烈建議你不要使用靜態變量。操作系統可以從內存中卸載你的課程,無論如何你可以放棄信息。使用服務來保存數據。 – greywolf82