android - 让 BroadcastReceiver 在后台作为服务运行 + 开机后自动启动

标签 android service broadcastreceiver

一般来说,我对 Android 和编程还很陌生,所以我正在尝试不同的 在 stackoverflow 上收集的教程和信息。

我想要完成的是让带有我的 SMS BroadcastReceiver 的应用程序作为服务运行,这样我就可以在应用程序处于后台时接收所有 SMS 广播。

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

为此我需要多项服务,还是一项服务就足够了? (用于连续检测 SMS + BOOT_COMPLETED)

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

public class SMS extends BroadcastReceiver {

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

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

获取 SMS 广播工作正常,但我不确定从这里去哪里。

非常感谢所有帮助:)

谢谢。

最佳答案

在 BOOT_COMPLETED 事件上启动您的服务并持续接收 SMS Intent 。

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);
  }
}

短信服务.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 Intent 上启动服务。 InentService 会完成这项工作。因此,不需要以上两个代码 fragment 。只需最后一个 fragment 即可完成工作。

关于android - 让 BroadcastReceiver 在后台作为服务运行 + 开机后自动启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16934540/

相关文章:

c# - windows服务打不开sql连接

c# - 在服务中使用 A3 证书

android - 如何获取从 onReceive() 触发的 Intent 的名称或类型

android - 将数据广播到 Flutter 中的多个小部件

sql - Android 可以在一条语句中查询两个表吗?

安卓模拟器报错:missing kernel file

Android - 如何通过用户名以编程方式切换用户?

Android Studio 导航编辑器不显示 fragment 的属性

docker - Kubernetes 服务连接被拒绝,如何访问服务?

android - 嗯? findViewById() 不能在onReceive() 内部调用?