让BroadcastReceiver在后台运行服务+启动后自动启动

时间:2013-06-05 08:01:38

标签: android service broadcastreceiver

我对Android和编程很新,所以我正在玩不同的东西 在stackoverflow上收集的教程和信息。

我想要完成的是将应用程序与我的SMS BroadcastReceiver作为服务运行,这样我就可以在应用程序处于后台时获得所有短信广播。

另外,如何添加BroadcastReceiver以接收BOOT_COMPLETED的广播并自动启动应用程序?

我需要多次服务,还是1项服务足够? (用于连续检测SMS + BOOT_COMPLETED)

目前我已经创建了一个BroadcastReceiver来获取SMS,就像这样;

public class SMS extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
   .. etc ..
   .. etc ..
}

我的AndroidManifest.xml文件有接收器和intent-filter 额外的android.provider.Telephony.SMS_RECEIVED

获取短信广播的工作正常,但我不确定从何处开始。

非常感谢所有帮助:)

感谢。

1 个答案:

答案 0 :(得分:1)

在BOOT_COMPLETED事件上开始服务并持续接收短信意图。

<强>的AndroidManifest.xml

<receiver android:name="BootReceiver" >
   <intent-filter>
   <action android:name="android.intent.action.BOOT_COMPLETED" />
   </intent-filter>
</receiver>

<强> BootReceiver.java

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, SMSService.class);
        context.startService(service);
  }
}

<强> SMSService.java

public class SMSService extends IntentService {
    @Override
    protected void onHandleIntent(Intent intent) {
         String action = intent.getAction();
         if (Intent.BOOT_COMPLETED.equals(action)) {
             //write your code to process BOOT_COMPLETED intent here
         }
         else if(Intent.SMS_RECEIVED.equals(action)) {
             //Write your code for processing SMS intent here
         }
    }
}

正如Fildor指出的那样,没有必要在BOOT_COMPLETED意图上启动服务。 InentService会做这项工作。因此,上面两个代码片段不是必需的。只是最后一个片段就可以完成这项工作。