【问题标题】:How do I implement a BroadcastReceiver in a Service Class in Android?如何在 Android 的服务类中实现 BroadcastReceiver?
【发布时间】:2013-09-17 23:01:41
【问题描述】:

我需要在我创建的 Service 类中实现 BroadcastReceiver:

public class MyService extends Service

在这个类中,当用户按下实现sendBroadcast()MyActivity 类中的按钮时,我必须使用线程来实现下载模拟。我无法将服务类扩展到BroadcastReceiver,因为它已经扩展到Service。谁能帮我弄清楚如何实现这个机制?

【问题讨论】:

  • 当你按下按钮时,用按钮启动服务,并在你的服务中注册广播接收器并在服务启动时发送广播,将另一个扩展广播接收器的类放在扩展服务的类中

标签: android android-service android-broadcast


【解决方案1】:

将 BroadcastReceiver 作为顶级类或服务中的内部类。并在您的服务中获取接收者的参考。像这样:

public class MyService extends Service {
    BroadcastReceiver mReceiver;

    // use this as an inner class like here or as a top-level class
    public class MyReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // do something
        }

        // constructor
        public MyReceiver(){

        }
    }

    @Override
    public void onCreate() {
         // get an instance of the receiver in your service
         IntentFilter filter = new IntentFilter();
         filter.addAction("action");
         filter.addAction("anotherAction");
         mReceiver = new MyReceiver();
         registerReceiver(mReceiver, filter);
    }
}

【讨论】:

  • 这个广播接收器是否也需要添加到清单中?使用意图过滤器?
  • @rmmcnulty9 不,因为接收者在运行时在服务的 onCreate() 中注册。
  • 我也有同样的情况,我想运行一个无限在后台运行的服务,每当我们收到短信时,它都会显示一个祝酒词。为此,我创建了一个扩展服务的类。哪个选项更好,我应该在服务类中创建一个 LocalBroadcastManager 还是为独立的广播接收器创建一个独立的广播接收器,它必须在清单文件中注册,然后当我收到短信时我的服务和广播接收器如何通信?
  • 拯救了我的一天! ...并且永远不要忘记在 onPause 或 onDestroy 中unregisterReceiver(mReceiver);
  • 哇,这真是一个绝妙的答案 :) 即使这么多年过去了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多