`

用BroadcastReceiver控制Service

 
阅读更多

通过在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的不同去执行不同的业务方法。

分享到:
评论

相关推荐

    service和BroadcastReceive控制的音乐播放器

    NULL 博文链接:https://zhchzh1000.iteye.com/blog/910692

    疯狂Android讲义第10章源码(Android服务Service_详解)

     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...

    疯狂Android讲义(第2版)源代码 第10章~第13章

    第10章、Service与BroadcastReceiver 10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDL...

    音乐播放器

    这个是对以前做的那个音乐播放器的优化版本,因为以前把控制音乐播放放在了activity里,这个版本已经放在了service中,在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止...

    深入理解Android组件间通信机制对面向对象特性的影响详解

    比如Activity,Service,BroadcastReceiver,你没有办法去创建一个Activity,Service或BroadcastReceiver,然后像使用其他类那样的调用其上的接口与其通信,用Setters和Getters改变属性等等。这也决定了,组件

    Android实例代码

    7.3、图形特效处理:使用Matrix控制变换; 使用drawBitmapMesh扭曲图像; 使用Shader填充图形; 7.4、逐帧(Frame)动画:AnimationDrawable; 7.5、补间(Tween)动画:Interpolator; 位置、大小、旋转度、透明度; 7.6...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    7.3、图形特效处理:使用Matrix控制变换; 使用drawBitmapMesh扭曲图像; 使用Shader填充图形; 7.4、逐帧(Frame)动画:AnimationDrawable; 7.5、补间(Tween)动画:Interpolator; 位置、大小、旋转度、透明度; 7.6...

    疯狂Android讲义源码

     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 ...

    疯狂Android讲义.part2

    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 帧...

    疯狂Android讲义.part1

    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 帧...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送...

    android开发demo集合

    27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据...

    android初学者入门项目

    27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据...

    android音乐播放器源码(改进版)

    这个版本已经放在了service中,在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止播放音乐,打完电话继续播放。当然还有上一个版本的甩歌功能,用的是加速度传感器,控制...

    《零点起飞学Android开发》 PDF

    第1篇android开发基础主要介绍了android系统的发展史、基本组件、android开发环境的搭建、android布局、android基本控件、android高级控件、android辅助功能、activity和intent、service与broadcastreceiver、...

    一个经典的播放器

    这个是对以前做的那个音乐播放器的优化版本,因为以前把控制音乐播放放在了activity里,这个版本已经放在了service中,在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止...

Global site tag (gtag.js) - Google Analytics