2011-12-21 63 views
0

我試圖製作一個讀取文本消息的應用程序。該應用程序正常工作,當我收到一條短信時,該消息會隨電話號碼一起顯示在烤麪包片中。問題在於,即使應用程序已關閉,即不在前臺,但仍會在收到短信時顯示敬酒。我已經使用了一個任務殺手應用程序,它仍然顯示敬酒。不顯示敬酒的唯一方法是取消應用程序的阻止。我使用這個網站,作爲一個教程Android廣播接收器應用程序在應用程序關閉時不會死亡

http://www.apriorit.com/our-company/dev-blog/227-handle-sms-on-android

我在教程中所做的一切,除了加密。

任何幫助表示讚賞!

謝謝, 克里斯

回答

3

這是正確的行爲actully。每當您收到消息時,系統都會發送短信廣播。由於您的應用程序在聲明中聲明瞭它想要接收此類廣播,因此每次都會創建並執行BroadcastReceiver的新實例。

如果你想只在特定的時間執行接收器(在這種情況下,當你的應用程序是在前臺),你必須註冊,並通過使用Context.registerReceiver()Context.unregisterReceiver()動態註銷它的代碼,而不是表現。

如何準確地做到這一點?

下面是一個簡短的例子。我假設你已經編寫了自己的類來擴展BroadcastReceiver並處理onReceive()中的內容。在這個例子中,這個類的名字是SmsReceiver,就像在鏈接教程中一樣。

我們的目標是隻在一個活動處於前臺時接收廣播,這意味着您還應該擁有一個擴展活動並像普通應用程序一樣顯示UI的類。

首先,我們需要一個接收器的實際實例作爲類成員。加入這樣的事情您的活動類:

private SmsReceiver smsReceiver = new SmsReceiver(); 

旁註:這實際上的主要區別之一在清單中,並在代碼登記之間:

  • 在代碼中創建一個接收器實例自己
  • 當在清單中註冊,系統會生成實例爲你在後臺

好,很好。現在,當活動進入前臺並退出時,我們只需註冊並取消註冊該接收器。看看Activity class doc中的圖表,這些事件中調用的框架方法是onResume()onPause()

添加以下行到你的onResume()方法:

@Override 
public void onResume() { 

    IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
    registerReceiver(smsReceiver, filter); 
} 

我們在這裏所做的其實很簡單。它是清單<receiver />標記的代碼等效物。我們用我們喜歡接收的廣播創建了一個intent過濾器,並使用它註冊我們的接收器。

下一步是取消註冊onPause()。再次,如果您尚未添加此行或創建onPause()

@Override 
public void onPause() { 
    unregisterReceiver(smsReceiver); 
} 

非常簡單 - 帶上我們的接收器實例,並在應用即將進入背景時取消註冊。這就是所有的魔法,一切都應該按照預期工作。 不要忘記刪除清單中的整個<receiver />標記,但是當您使用現有代碼時。否則,您會以兩種方式註冊您的接收器。

+0

所以我試圖實現你的建議,但我有點困惑。我在哪裏把registerReceiver,我如何正確使用它,即什麼是代碼示例。有沒有可以鏈接到我的例子?我有這個,但它會導致崩潰BroadcastReceiver BR = null; IntentFilter filter = null; registerReceiver(BR,filter); – 2011-12-21 03:12:56

+0

@ChrisSippel你不能用這樣的'null'對象註冊。我爲我的答案添加了一個簡短的指南。 – 2011-12-21 10:58:05

+0

所以我終於到處去做正確的事情,假期和學校,我一直很忙。所以我很高興地說它很有用,我非常感謝你! – 2012-01-14 21:12:45

0

您可以將toast想象爲一種系統通知。所以無論Activity是否在前臺,它都會顯示。另外,當你延長BroadcastReceiver時,只要你的過程還活着,你的班級仍然會收到意向。 A BroadcastReceiver不與任何前景Activity綁定。

+0

我希望當應用程序不在前臺時關閉/停止BroadcastReceiver。敬酒只是讓我看到發生了什麼的一種方式。 – 2011-12-21 03:18:49

相關問題