AS广播接收者BroadcastReceiver组件

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.

猜你喜欢

转载自blog.csdn.net/qq_44841678/article/details/105460657