通过在Service类的内部定义BroadcastReceiver对象,接收外部发送的广播,达到控制Service的目的。
步骤如下:
1、自定义Service的子类
2、在该Service子类中定义一个内部类,该类是BroadcastReceiver的子类
3、在Service类的onCreate方法中注册该广播接收者类,并设置action的值
4、在Activity中启动或绑定Service
5、在Activity中发送广播并传递数据,调用Service中的广播接收者的onReceive()方法
MyService.java
public class MyService extends Service { private String tag = "MyService"; @Override public IBinder onBind(Intent intent) { return null; } // 服务创建史执行,只会执行一次 public void onCreate() { try { Log.i(tag, "MyService onCreate()....."); MyReceiver myReceiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Constant.ACTION_PALY); filter.addAction(Constant.ACTION_PAUSE); registerReceiver(myReceiver, filter); } catch (Exception e) { e.printStackTrace(); } } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(tag, "MyService onStartCommand()....."); return super.onStartCommand(intent, flags, startId); } public void play() { Log.i(tag, "my function Paly()...."); } public void pause() { Log.i(tag, "my function Pause()...."); } private class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i(tag, intent.getAction()); try { if (Constant.ACTION_PALY.equals(intent.getAction())) { MyService.this.play(); } else if (Constant.ACTION_PAUSE.equals(intent.getAction())) { MyService.this.pause(); } } catch (Exception e) { e.printStackTrace(); } } } }
MainActivity.java
public class MainActivity extends Activity { Button paly, pause; Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { paly = (Button) findViewById(R.id.btn_paly); pause = (Button) findViewById(R.id.btn_pause); intent = new Intent(Constant.ACTION_MYSERVICE); startService(intent); paly.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { Log.i("MainActivity", "点击了Button_Play w .."); // Intent broadcast = new Intent(); // broadcast.setAction(Constant.ACTION_PALY); //或者用下面方法启动服务 intent.setAction(Constant.ACTION_PALY); sendBroadcast(intent); } catch (Exception e) { e.printStackTrace(); } } }); pause.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i("MainActivity", "点击了Button_Pause .."); Intent broadcast = new Intent(); broadcast.setAction(Constant.ACTION_PAUSE); sendBroadcast(broadcast); } }); } catch (Exception e) { e.printStackTrace(); } } }
Constant.java提供常量
public class Constant { public static final String ACTION_PALY = "com.lydia.service.ACTION_PALY"; public static final String ACTION_PAUSE = "com.lydia.service.ACTION_PAUSE"; public static final String ACTION_MYSERVICE = "com.lydia.service.ACTION_MYSERVICE"; }
AndroidManifest.java中的配置
<service android:name=".MyService" > <intent-filter > <action android:name="com.lydia.service.ACTION_MYSERVICE"/> </intent-filter> </service>
测试结果:
启动程序便启动了Service,在启动Service的时候调用了MyService类中的onCreate()方法,该方法中注册了广播。当点击Button的时候,开始发送广播,广播发送后哦,MyReceiver类就会开始接收广播,调用onReceive()方法,根据intent.getAction()得到的Action的不同去执行不同的业务方法。
相关推荐
NULL 博文链接:https://zhchzh1000.iteye.com/blog/910692
10.6.2 使用Vibrator控制手机振动 407 10.7 手机闹钟服务 (AlarmManager) 408 10.7.1 AlarmManager简介 408 10.7.2 设置闹钟 409 10.8 接收广播消息 413 10.8.1 BroadcastReceiver简介 413 10.8.2...
第10章、Service与BroadcastReceiver 10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDL...
这个是对以前做的那个音乐播放器的优化版本,因为以前把控制音乐播放放在了activity里,这个版本已经放在了service中,在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止...
比如Activity,Service,BroadcastReceiver,你没有办法去创建一个Activity,Service或BroadcastReceiver,然后像使用其他类那样的调用其上的接口与其通信,用Setters和Getters改变属性等等。这也决定了,组件
7.3、图形特效处理:使用Matrix控制变换; 使用drawBitmapMesh扭曲图像; 使用Shader填充图形; 7.4、逐帧(Frame)动画:AnimationDrawable; 7.5、补间(Tween)动画:Interpolator; 位置、大小、旋转度、透明度; 7.6...
7.3、图形特效处理:使用Matrix控制变换; 使用drawBitmapMesh扭曲图像; 使用Shader填充图形; 7.4、逐帧(Frame)动画:AnimationDrawable; 7.5、补间(Tween)动画:Interpolator; 位置、大小、旋转度、透明度; 7.6...
2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用XML布局文件和Java 代码混合控制UI界面 42 2.1.5 开发自定义View 43 2.2 布局管理器 46 2.2.1 线性布局 47 2.2.2 ...
2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用XML布局文件和Java 代码混合控制UI界面 42 2.1.5 开发自定义View 43 2.2 布局管理器 46 2.2.1 线性布局 47 2.2.2 表格布局 49 2.2.3 帧...
2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用XML布局文件和Java 代码混合控制UI界面 42 2.1.5 开发自定义View 43 2.2 布局管理器 46 2.2.1 线性布局 47 2.2.2 表格布局 49 2.2.3 帧...
6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送...
6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送...
6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送...
27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据...
27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据...
这个版本已经放在了service中,在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止播放音乐,打完电话继续播放。当然还有上一个版本的甩歌功能,用的是加速度传感器,控制...
第1篇android开发基础主要介绍了android系统的发展史、基本组件、android开发环境的搭建、android布局、android基本控件、android高级控件、android辅助功能、activity和intent、service与broadcastreceiver、...
这个是对以前做的那个音乐播放器的优化版本,因为以前把控制音乐播放放在了activity里,这个版本已经放在了service中,在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止...