Android Studio广播组件与通知相关示例应用

广播--短信来乐和音乐播放器

源码地址:
1.短信来音:https://gitee.com/huo_shui_three_thousand/BroadcastNews
2.音乐播放器:https://gitee.com/huo_shui_three_thousand/MusicPlayer

1.短信到来时播放音乐

效果如下:(静音ing,其实有声音的)
在这里插入图片描述
在这里插入图片描述
**注:**在清单文件AndroidManifest.xml,添加接收者注册信息和添加短信接收权限
在这里插入图片描述 检测短信权限及申请本权限代码:

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                if (grantResults[0]!=PackageManager.PERMISSION_GRANTED){
                    Toast.makeText(this,"未授权,无法实现预定的功能!",Toast.LENGTH_SHORT).show();
                    finish();
                }else {
                    Toast.makeText(this,"请发一条短信验证……",Toast.LENGTH_SHORT).show();
                }
        }

    }


如果短信权限未授权,则:
在这里插入图片描述

2.音乐播放器

效果如下:(又是静音ing,实际有音乐的。。。)
播放,暂停,继续,停止,上一曲,下一曲
在这里插入图片描述
大致构成:
在这里插入图片描述
关于下一首,上一首:
仔细考虑播放器的播放状态后,一开始的处于待播放和停止后的待播放,暂停的待继续播放,以及播放中
对于上下歌曲的切换:

  • 播放中切歌,一直是播放的状态,切完歌就是播放上一首,下一首的新开始
  • 未播放时(不管暂停还是停止),都是未播放的静态,但切歌是进行时,而此时歌曲信息跟上了切歌,一定切歌成功了
  • 最后一首的下一首是第一首,第一首的上一首是最后一首

部分代码:

 public class MyReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(final Context context, Intent intent)
        {
            if (current < 0){
                current=3;

            }else if (current >= 3){
                current=0;

            }
            int control = intent.getIntExtra("control", -1);
            switch (control)
            {
                // 播放或暂停
                case 1:
                    // 原来处于没有播放状态
                    if (status == 0x11)
                    {
                        // 准备并播放音乐
                        prepareAndPlay(musics[current]);
                        status = 0x12;
                    }
                    // 原来处于播放状态
                    else if (status == 0x12)
                    {
                        // 暂停
                        mPlayer.pause();
                        // 改变为暂停状态
                        status = 0x13;
                    }
                    // 原来处于暂停状态
                    else if (status == 0x13)
                    {
                        // 播放
                        mPlayer.start();
                        // 改变状态
                        status = 0x12;
                    }
                    break;
                // 停止声音
                case 2:
                    // 如果原来正在播放或暂停
                    if (status == 0x12 || status == 0x13)
                    {
                        // 停止播放
                        mPlayer.stop();
                        status = 0x11;
                    }
                    break;
                case 3:
                    if (status == 0x12)//处于播放中切换上一首
                    {
                       // mPlayer.stop();
                        current--;
                       
                        prepareAndPlay(musics[current]);
                        status = 0x12;
                    }else if (status == 0x11 || status == 0x13)//处于正要播放或者是暂停待播放
                    {
                        current--;//目录切换上一首
                       
                        status = 0x11;
                    }
                    break;
                case 4:
                    if (status == 0x12)//处于播放中切换下一首
                    {
                       // mPlayer.stop();
                        current++;
                        prepareAndPlay(musics[current]);
                        status = 0x12;
                    }else if (status == 0x11 || status == 0x13)//处于正要播放或者是暂停待播放
                    {
                        current++;//目录切换下一首
                        status = 0x11;
                    }
                    break;

            }
            if (current < 0){
                current=2;

            }else if (current >= 3){
                current=0;

            }
            // 广播通知Activity更改图标、文本框
            Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);
            sendIntent.putExtra("update", status);
            sendIntent.putExtra("current", current);
            // 发送广播,将被Activity组件中的BroadcastReceiver接收到
            sendBroadcast(sendIntent);
        }
    }
    private void prepareAndPlay(String music)
    {
        try
        {
            // 打开指定音乐文件
            AssetFileDescriptor afd = am.openFd(music);
            mPlayer.reset();
            // 使用MediaPlayer加载指定的声音文件。
            mPlayer.setDataSource(afd.getFileDescriptor(),
                    afd.getStartOffset(), afd.getLength());
            // 准备声音
            mPlayer.prepare();
            // 播放
            mPlayer.start();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值