`

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

    笔试题(Android100选择题).doc

    Android 系统主要由四大组件组成,即 Activity、Service、BroadcastReceiver 和 ContentProvider。 1. Android 四大组件: Android 系统的四大组件分别是 Activity、Service、BroadcastReceiver 和 ...

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

    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面试题1

    在 Android 开发中,Activity、Service、Broadcast、BroadcastReceiver、ContentProvider、ContentResolver、Intent 和 IntentFilter 等组件扮演着重要角色。Activity 是 Android 中的基本组件,负责与用户交互,...

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

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

    基于Android手机终端点菜系统本科毕业论文.doc

    在 Android 手机终端点菜系统中,使用了 Android 技术来实现客户端的开发,包括 Activity、Service、BroadcastReceiver 和 ContentProvider 四大组件。其中,Activity 负责用户界面交互,Service 负责后台任务处理,...

    《零点起飞学Android开发》 PDF

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

Global site tag (gtag.js) - Google Analytics