Android Studio实现接收信息播放音乐
进阶版音乐盒的实现见后一篇博客:
链接: https://blog.csdn.net/qq_44841678/article/details/105469490.
要求:
短信到来时自动产生的系统广播,之后接收广播激活音乐播放服务程序,活动组件程序使按钮在音乐播放之后可用。
注意点:
BroadcastReceiver程序此处用在清单文件里注册的方法来配置;
准备:
在清单文件AndroidManifest.xml里,手工添加注册短信接收权限、配置短信广播接收意图过滤器的代码
和部分:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.musicbroadcast">
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".MyAudioService"
android:enabled="true"
android:exported="true"></service>
<receiver
android:name=".SmsReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
实现界面展示:
开始运行 | 短信未到达 | 短信到达 |
---|---|---|
.xml文件:
布局文件:只有一个button
清单文件:AndroidManifest.xml(需配置)
事件监听控制:
音乐服务文件MyAudioService.java:
创建一个媒体播放器播放音乐:
mediaPlayer = MediaPlayer.create(this,R.raw.white);
BroadcastReceiver接收到短信广播之后,调用服务程序,播放音乐同时,打包数据发送出去,告诉Activity收到了短信且正在播放音乐,Activity设置按钮可用,监听单击事件停止播放音乐。部分代码:
MainActivity.java:
Intent intent = getIntent(); //获取广播意图对象
isCast = intent.getBooleanExtra("iscast", false); //默认值为false
btnStop.setEnabled(isCast); //设置停止按钮可用和单击监听
if(isCast) Toast.makeText(this, "正在播放音乐...", Toast.LENGTH_SHORT).show();
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
//显式服务调用意图(非绑定式)
Intent intent=new Intent(MainActivity.this,MyAudioService.class);
//在Activity组件里,停止音乐播放服务
stopService(intent);
finish(); //销毁本活动
}
});
SmsReceiver.java:
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);
}
}
测试方法:
先授权短信权限,Home键返回,发送短信到本机(号5554),短信到后广播接收者程序将被激活,自动播放音乐。
踩坑:注意AndroidManifest.xml文件的手动修改要改两处。
最后附上源码(码云仓库):
链接: https://gitee.com/yangjy11/AS-Broadcast/tree/master/MusicBroadcast.