服務或結束啓動是不是強制性的
其實,你並不需要實現一個Service
或註冊android.intent.action.BOOT_COMPLETED
一些例子說明如何註冊/註銷BroadcastReceiver
當活動被創建和銷燬時。但是,這對於只在打開應用程序時纔會使用的意圖很有用(例如,用於Service/Activity之間的內部通信)。
但是,如果是短信,您希望始終聽取意圖(而不是僅在您打開應用程序時)。
還有另外一種方式
您可以創建一個class
延伸BroadcastReceiver
,並通過AndroidManifest.xml
註冊所需的意圖。這樣,BroadcastReceiver
將獨立於您的活動(並且不會取決於活動的生命週期)
這樣,即使您的應用已關閉,短信到達後您的BroadcastReceiver
也會自動通知您。
AndroidManifest。XML
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application>
....
<receiver android:name=".MyCustomBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
MyCustomBroadcastReceiver.java
public class MyCustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
String action = intent.getAction();
if(action != null) {
if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
// DO YOUR STUFF
} else if (action.equals("ANOTHER ACTION")) {
// DO ANOTHER STUFF
}
}
}
}
}
注意
您可以添加其他意向過濾器AndroidManifest和處理所有的人在同一BroadcastReceiver
。
僅當您執行長期任務時才啓動服務。您只需顯示通知或更新某個數據庫,只需使用上面的代碼即可。
您可能還想確保在應用程序清單文件中定義了「RECEIVE_BOOT_COMPLETED」權限,以使其可以正常工作。 – 2012-05-27 18:01:18
如果應用程序上下文從項目庫中擴展另一個,這是否工作? – Maxrunner 2012-08-23 18:00:45
感謝Javanator(Rohit),它對我的幫助(Ravi-CIPL&馬來西亞) – DynamicMind 2013-07-22 07:30:08