广播--短信来乐和音乐播放器
- 1.短信到来时播放音乐
- 2.音乐播放器
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();
}
}
}