实验三 广播和服务
首先确定实验目的:
编写广播接收者程序,当收到短信时,对短信广播做出响应:app会启动音乐播放服务。
顺便,写一个按钮,当收到短信广播时,由不可点击切换为可点击,点击按钮,就可以停止音乐播放。
1. 创建广播接受组件:SmsReceiver.java
1.1 创建一个类SmsReceiver继承类BroadcastReceiver
当接收到广播时,执行重写的onReceive()方法
/*
本广播接收者程序分别调用了应用的主Activity程序和播放音乐的服务程序
*/
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MyAudioService.class);
//在广播组件里,通过上下文对象启动音乐播放服务组件
context.startService(serviceIntent);
//新建调用Activity组件的意图
Intent activityIntent = new Intent(context, MainActivity.class);
activityIntent.putExtra("iscast", true); //携带数据
//新建栈用来存放被启动的Activity(当已经存在时,只做移动处理)
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//在广播组件里,通过上下文对象启动Activity组件
context.startActivity(activityIntent);
}
}
而这个广播接收组件是接收谁发出的广播呢?
1.2 注册广播接受程序
在manifests中的application标签内添加receiver标签
name绑定类,intent-filter过滤请求触发广播
<receiver
android:name=".SmsReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
注意其中的intent-filter标签,里面的配置就是用于过滤其中指定的请求,这里的action标签就是用于过滤出短信消息触发广播。
当手机收到短信时,系统发出一个广播,这里receiver所绑定的SmsReceiver类接受到广播,然后执行onReceive()函数。
2. 添加音乐服务文件MyAudioService.java
我们想要收到广播时,播放音乐,那么我们得添加一个音乐服务
2.1 创建一个类MyAudioService继承类Service
public class MyAudioService extends Service {
MediaPlayer mediaPlayer;
@Override