[android] 代码注册广播接收者&利用广播调用服务的方法
2016-03-31 22:09
573 查看
利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光
主界面里面
在界面创建的时候开启一下服务普通的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
MyService.java
主界面里面
在界面创建的时候开启一下服务普通的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(); } } }
相关文章推荐
- Intent 全面理解
- Android学习之设计模式之单例模式
- Android 的 SDK Manager 无法启动 闪退解决方法
- 解决Attribute "rippleColor" has already been defined的问题
- android 文字描边
- Android知识总结:ListView 出现IndexOutOfBoundsException异常
- 聊聊Android 热修复Nuwa有哪些坑
- Android学习启动篇——itxiebo
- android 视频 播放 (VideoView的小实例)
- Android StateMachine 学习笔记
- Ubuntu 12.4 配置android开发环境(转载)
- Android用Websocket实现聊天室
- [android] 采用aidl绑定远程服务
- android 属性android:visibility及 view的setVisibility方法值的意思
- Android获取新收到的短信内容
- Windows x64 Android开发环境搭建
- android导入项目时提示:invalid project description的解决办法
- Android 域名解析为IP的方法
- ubuntu 16.04 android studio 安装
- Android 在SD卡上建立文件夹