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();
// }
}
我遇到的問題是應用程序檢測時,電話響起,設置ringing
到true
,並顯示相應敬酒消息。但是,當電話狀態爲idle
時,它不會輸入if (ringing)
語句顯示ringing is true
Toast消息。但是,如果我在其上方的敬酒信息中留言,它會正確打印Phone is idle
。
ringing
是否有可能重置爲false
電話振鈴和電話再次變爲空閒之間的某個地方?
確切的說,當onReceive被調用時它是一個新的實例,所以沒有以前的值保留。你可以在BroadcastReceiver調用 – Sulfkain
之間保留這個偏好。謝謝,我把它作爲一個靜態變量,它現在運行良好。 – Jack
我強烈建議你不要使用靜態變量。操作系統可以從內存中卸載你的課程,無論如何你可以放棄信息。使用服務來保存數據。 – greywolf82