2013-06-05 114 views
3

我对Android和编程一般都很陌生,所以我正在玩弄不同的 教程和在这里收集的信息在stackoverflow上。让BroadcastReceiver作为服务在后台运行+启动后自动启动

我想完成的是将应用程序与我的SMS BroadcastReceiver作为服务运行,以便在应用程序处于后台时可以获取所有SMS广播。

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

我需要多个服务吗?或者1个服务是否足够? (用于连续检测SMS + BOOT_COMPLETED)

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

public class SMS extends BroadcastReceiver { 

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

和我的AndroidManifest.xml文件有接收器和意图过滤器与 额外android.provider.Telephony.SMS_RECEIVED

获取短信播报工作正常,但我不知道在哪里可以从这里走。

所有帮助非常感谢:)

谢谢。

+0

你知道在Android中,“服务”与Windows中的“服务”不同*对吧?运行服务不断花费电池。也许你想要的是一个IntentService,它在处理完发送给它的所有待处理的Intents(例如通过你的广播接收器)之后会自行停止。 – Fildor

+0

是的,如果我理解正确的概念,它会消耗电池。 但我正在寻找解决方案,以便如何不断从BroadcastReceiver获取SMS。 :) – ole

+0

如果我没有记错,系统会调用您的BroadCastReceiver。无需服务。请有人纠正我或确认这一点,因为我不是100%肯定。 – Fildor

回答

1

要在BOOT_COMPLETED事件中启动服务并持续接收SMS意向。

的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 
     } 
    } 
} 

As,Fildor已经指出,没有必要在BOOT_COMPLETED意图上启动服务。 InentService会完成这项工作。所以,上面的两个代码片段不是必需的。只是最后一个片段会完成这项工作。

+0

那真是太棒了。你的意思是我根本不需要实例化任何BroadcastReceivers或者Services,只需使用IntentService来BOOT_COMPLETED和SMS_RECEIVED? (顺便说一句,IntentService显示为一个正在运行的服务?) 感谢您的帮助,将尝试一下,让你知道它是如何工作的:) – ole

+0

if(android.intent.action.BOOT_COMPLETED.equals(action) )这行为我抛出错误,android.intent不能解析为什么这个错误来了@mopurizwarriors –

+0

如果(intent.getAction()。等于(Intent.ACTION_BOOT_COMPLETED))这段代码是有用的,如果任何人有错误 –

相关问题