[android] 代码注册广播接收者&利用广播调用服务的方法
利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光
主界面里面
在界面创建的时候开启一下服务普通的startService()方法
发送一条广播出去
获取Intent对象,通过new出来
调用Intent对象的setAction()方法,参数:一般就是包名
调用sendBroadcast(intebt)方法,发送广播,参数:Intent对象
服务里面
新建一个MyService类继承系统的Service类
添加一个自定义的服务的方法callServiceMethod(),我们目的要调用的方法
新建一个内部类MyReceiver继承系统的Receiver类
广播接收者既能通过清单文件注册,也可以通过代码的方式注册,这是四大组件中唯一的特殊的一个
在MyService中创建一个MyReceiver的成员变量
在服务创建的时候,注册广播接收者,在onCreate()方法里面
调用registerReceiver(receiver,filter)方法,注册这个广播接收者,参数:receiver是BroadcastReceiver对象,通过new MyReceiver()来创建,filter是IntentFilter对象
获取IntentFilter对象,通过new出来
调用IntentFilter对象的addAction(action)方法,意图过滤器对象添加监听动作,上面发送的那个动作
当接收者收到信号的时候,会调用MyReceiver对象的onReceive()方法,在这个方法里面可以去调用服务的私有方法,比如callServiceMethod()
当服务销毁的时候,解除注册的广播接收者,在onDestroy()方法里面,调用unResisterReceiver(receiver),参数:广播接收者对象
MainActivity.java
package com.tsh.broadcallservice; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //开启服务 Intent intent=new Intent(this,MyService.class); startService(intent); } //广播调用服务 public void call(View v){ Intent intent=new Intent(); intent.setAction("com.tsh.broadcallservice"); sendBroadcast(intent); } }
MyService.java
package com.tsh.broadcallservice; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.widget.Toast; public class MyService extends Service { private MyReceiver receiver; @Override public IBinder onBind(Intent intent) { return null; } //服务创建的时候注册广播接收者 @Override public void onCreate() { super.onCreate(); receiver=new MyReceiver(); IntentFilter filter=new IntentFilter(); filter.addAction("com.tsh.broadcallservice"); registerReceiver(receiver, filter); } //服务里面的一个方法 public void callServiceMethod(){ Toast.makeText(getApplicationContext(), "广播调用服务啦", 0).show(); } //内部类实现广播接收者 private class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { callServiceMethod(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具