`

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

分享到:
评论

相关推荐

    android服务自启动Service以及BroadcastReceiver和Notification.zip

    - 当使用Service和BroadcastReceiver时,确保理解它们的工作原理,合理安排任务执行,避免不必要的电池消耗。 - 对于通知,确保遵循最佳实践,如适时显示、提供取消选项,以及遵守系统的通知规范,以免打扰用户。 ...

    BroadCastReceiver

    在实际开发中,`BroadcastReceiver`常常与其他组件如`Service`、`Activity`结合使用,以实现更复杂的业务逻辑。例如,当接收到开机广播时启动一个服务,或者在接收到特定广播时更新UI。 为了优化性能和用户体验,应...

    ServiceDemo项目中任意界面控制service的开启与停止

    为了能在任何界面控制Service,我们需要创建一个BroadcastReceiver。这个BroadcastReceiver会在接收到特定广播时启动或停止Service。首先,创建一个新的BroadcastReceiver类,如`ServiceControlReceiver.java`: ``...

    Android学习之BroadcastReceiver总结

    因此,开发者需要考虑使用JobScheduler、WorkManager或者Service来替代部分BroadcastReceiver的功能。 七、BroadcastReceiver的最佳实践 1. 使用动态注册减少电池消耗,因为静态注册的BroadcastReceiver会在系统...

    Android通过Service实现简单的音乐播放

    我们使用 Started Service 来实现音乐播放,并且使用 BroadcastReceiver 来接收服务的状态变化。通过本文,读者可以了解 Android 中的 Service 组件,并且学习如何使用 Service 来实现音乐播放等功能。 知识点: 1...

    初中级Android开发社招面试之Service及BroadcastReceiver.zip

    在面试中,对于Service和BroadcastReceiver,面试官可能会询问如何正确使用它们、处理生命周期、优化性能、处理并发问题以及如何在不同情况下选择合适的方式等问题。了解这些知识点并能灵活应用是成为一名合格的...

    初中级Android开发社招面试之Service及BroadcastReceiver.pdf

    - 使用START_STICKY、START_NOT_STICKY或START_REDELIVER_INTENT在onStartCommand()中返回,以控制服务重启策略。 - 设置Service的优先级,通过在AndroidManifest.xml中设置android:priority属性。 - 在onDestroy...

    Service使用demo(Eclipse)

    总结一下,"Service使用demo(Eclipse)"是一个实践教程,旨在帮助开发者理解如何在Eclipse中创建、管理和控制Service,以及如何利用BroadcastReceiver增强Service的功能。通过这个示例,你可以学习到如何结合这两种...

    android BroadcastReceiver 源码

    在Android系统中,BroadcastReceiver是实现跨进程通信和全局事件通知的重要组件。它允许应用程序接收并响应...通过分析源码,开发者能更好地控制广播的生命周期,以及在广播中执行的逻辑,提升应用的健壮性和用户体验。

    service和BroadcastReceive控制的音乐播放器

    本项目聚焦于使用`Service`和`BroadcastReceiver`来控制一个音乐播放器,这涉及到Android的多媒体处理、服务生命周期管理和广播接收器的应用策略。 首先,`Service`是Android中的一个后台运行组件,它可以在没有...

    BroadcastReceiver.rar

    本教程将深入探讨BroadcastReceiver的工作原理及其使用方法,同时提供一个基于Kotlin编写的实战示例。 一、BroadcastReceiver基本概念 1. 广播(Broadcast):在Android中,广播是一种全局的通知机制,任何应用都...

    Android防止service多次执行startCommand

    此外,还可以通过使用Intent的Extra数据来控制Service的行为。例如,每次启动Service时,Intent携带一个唯一的标识,Service根据这个标识判断是否需要处理新的请求。 以上策略都是为了确保Service的正确管理和资源...

    service receiver notification播放器

    Service接收器,通常是指BroadcastReceiver与Service的结合,它会在接收到特定广播事件时启动或停止Service。例如,当手机连接到Wi-Fi时,我们可以启动一个Service进行大文件下载;或者在电量低时,自动暂停正在运行...

    BroadcastReceiverDemo

    3. 考虑使用BroadcastReceiver的替代方案,如Service、EventBus或LiveData,它们在某些场景下可能提供更好的性能和灵活性。 总之,"BroadcastReceiverDemo"是一个很好的学习资源,它展示了如何在Android应用中使用...

    Android 多个service的action 相同冲突 验证demo

    这种方法增加了代码的复杂性,但可以更灵活地控制Service的启动。 现在,让我们来看一下提供的"Android 多个service的action冲突验证demo"。这个示例项目很可能是用来演示如何在ACTION相同的情况下,通过上述策略之...

    仿网易云音乐播放控制面板实现(Service+UI绑定)

    在Android应用开发中,创建一个类似网易云音乐的播放控制面板是常见的需求,这涉及到多媒体播放、服务(Service)的使用以及用户界面(UI)的绑定。本项目旨在通过Service和UI的绑定来实现这样的功能,使用户可以...

    Android 带进度条的使用Service实现的音乐播放器

    6. **BroadcastReceiver**: 在Service和Activity之间通信,可以使用BroadcastReceiver。例如,当音乐状态改变(如播放、暂停)时,Service可以通过发送自定义广播通知UI更新状态。 7. **Progress Bar**: UI上的...

    Service与多个Activity交互

    当一个Service需要与多个Activity进行数据交换或控制交互时,Broadcast(广播)就起到了关键的作用。 **Broadcast(广播):** BroadcastReceiver是Android系统中的一个重要组件,它用于接收系统或应用发送的广播...

    BroadcastReceiver 学习

    BroadcastReceiver还可以与其他组件(如Service、Activity)配合使用,实现更复杂的功能。例如,当我们收到某个广播时,可以启动一个Service进行后台任务处理,或者通过PendingIntent跳转到特定Activity。 在实际...

Global site tag (gtag.js) - Google Analytics