2012-07-13 21 views
1

嗯,我有一個類擴展broadcastreceiver正在收聽消息。現在,無論何時收到消息,我都會創建一個新的應用程序實例。所以,當我關閉它時,我必須按兩次按鈕。誰能幫我?Android廣播接收器創建新的實例

public class SMSReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent) { 
    Bundle myBundle = intent.getExtras(); 
    SmsMessage [] messages = null; 
    String strMessage = ""; 
    String phoneNumber = ""; 

    if (myBundle != null) { 
     Object [] pdus = (Object[]) myBundle.get("pdus"); 
     messages = new SmsMessage[pdus.length]; 

     for (int i = 0; i < messages.length; i++) { 
      messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      strMessage += "SMS From: " + messages[i].getOriginatingAddress(); 
      strMessage += " : "; 
      strMessage += messages[i].getMessageBody(); 
      strMessage += "\n"; 

      phoneNumber = messages[i].getDisplayOriginatingAddress(); 
     } 

     if (phoneNumber.equals("T-Mobile")) { 
      Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show(); 
      abortBroadcast(); 
     } 

    } 
} 
} 
+0

你是什麼意思由「創建新實例」 – Soham 2012-07-13 19:05:16

+0

請張貼您的清單,並明確你所看到的,你描述爲兩個實例。只是描述確切的行爲,並從你的角度告訴我們它有什麼問題 – 2012-07-13 19:06:27

回答

1

首先,我真的不認爲它正在創建一個新的應用程序實例。更可能發生的是一項活動正在被帶到前臺。我認爲你應該看看清單或張貼清單,以便我們看到廣播是如何定向的。這可能是廣播的目標也具有啓動活動的效果。因此請檢查清單,廣播接收器中沒有任何內容會導致此問題。話雖如此,它真的取決於Android操作系統什麼時候顯示。但就兩個例子而言。那只是沒有發生。

PS。我不知道確切的原因,但我可能會說從廣播reeiver發出Toast,而不是使用startActivity()傳遞給一個活動。

+0

這是它在pastebin http://pastebin.com/VmMtwyKs – BKovac 2012-07-13 19:26:59

+0

是否有一個原因,你需要在廣播接收機發出吐司? – 2012-07-14 00:52:45

+0

通常,您使用廣播接收器執行的操作是啓動一個活動並讓活動發出Toast消息。請記住,活動中有onStart()和onCreate()方法。 – 2012-07-14 00:53:57

3

如果活動的一個實例已經存在於當前任務的頂部,則系統通過調用其onNewIntent()方法將意圖路由到該實例,而不是創建活動的新實例。該活動可以多次實例化,每個實例可以屬於不同的任務,並且一個任務可以有多個實例(但只有當後端堆棧頂部的活動不是該活動的現有實例時)。

組這樣

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

OR

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

爲了避免活動的多個實例。謝謝

有關進一步的詳細信息和知識,這裏是一個很好的博客,它會指導你。

+0

它仍在發生。現在,讓我說出發生了什麼。我的應用程序運行,當消息到達這裏時,像打開一個窗口的動畫通過,並在新窗口(與最後一個窗口和我的佈局完全相同)中有我的烤麪包。現在,當我按回它退出最後一個窗口「打開」,然後輸入它之前的窗口,直到它到達根窗口,比應用程序關閉。 – BKovac 2012-07-13 23:30:49

+0

好吧,我有記錄每當onReceive開始,這是新的「窗口」openes的確切時間。 – BKovac 2012-07-18 20:41:32