Android Studio实现音乐播放器
作者:zhoulingziCSDN 时间:2021-07-01 14:02:43
Androidstudio音乐播放器,供大家参考,具体内容如下
实现目的:利用广播在myapplication中原本button点我暂停按钮是灰色无法点击的,此时发送一条短信给自己的安卓手机,按钮变成黑色,音乐开始播放,此时点击 点我暂停 按钮,音乐停止。
结果截图:
发送短信给自己后:,点我暂停 按钮变成黑色,并开始播放音乐:
此时点击点我暂停按钮,音乐暂停
广播
Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。这些广播会在所关注的事件发生时发送。举例来说,Android 系统会在发生各种系统事件时发送广播,例如系统启动或设备开始充电时。再比如,应用可以发送自定义广播来通知其他应用它们可能感兴趣的事件(例如,一些新数据已下载)。
广播消息本身会被封装在一个Intent对象中,该对象的操作字符串会标识所发生的事件(例如 android.intent.action.AIRPLANE_MODE )。该 Intent 可能还包含绑定到其 extra 字段中的附加信息。例如,飞行模式 intent 包含布尔值 extra 来指示是否已开启飞行模式。
xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/loading">
<Button
android:text="BUTTON"
android:layout_marginTop="@android:dimen/app_icon_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="send"/>
</LinearLayout>
mainactivity.java文件
package com.example.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btnStop;
private boolean isCast; //是否为广播激活
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{"android.permission.RECEIVE_SMS"},1);
}
btnStop=findViewById(R.id.btnStop);
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);
isCast=false;
btnStop.setEnabled(isCast);
// finish(); //销毁本活动
}
});
}
@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();
}
}
}
}
SmsReceiver.java文件
编写广播接收者程序
package com.example.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/*
本广播接收者程序分别调用了应用的主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);
}
}
MyAudioService.java文件
package com.example.myapplication;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class MyAudioService extends Service {
MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
mediaPlayer = MediaPlayer.create(this, R.raw.liyue);//创建音乐服务。播放R.raw中的音乐liyue
mediaPlayer.start();//开始服务
}
@Override
public void onDestroy() {
mediaPlayer.stop();
}
}
来源:https://blog.csdn.net/zhoulingziCSDN/article/details/109940975
标签:Android,studio,音乐播放器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
ShardingSphere解析SQL示例详解
2023-11-23 13:57:55
基于C#实现图片滑动验证码的示例代码
2022-01-15 22:53:31
![](https://img.aspxhome.com/file/2023/3/110173_0s.jpg)
android开启免提切换功能示例
2023-07-13 06:42:28
SpringBoot项目中的多数据源支持的方法
2022-01-12 03:42:19
Java创建型设计模式之抽象工厂模式(Abstract Factory)
2022-08-31 01:25:56
![](https://img.aspxhome.com/file/2023/4/101764_0s.png)
仅用5分钟极速入门Dubbo使用教程
2022-08-08 12:08:55
![](https://img.aspxhome.com/file/2023/3/83433_0s.png)
HelloSpringMVC注解版实现步骤解析
2021-07-21 01:58:42
.net(c#)中的new关键字详细介绍
2021-08-29 21:19:27
Android存储访问框架的使用小结
2022-09-28 23:18:16
![](https://img.aspxhome.com/file/2023/7/110757_0s.png)
Java 按照字节来截取字符串的代码(不会出现半个汉字)
2023-04-30 01:40:22
java 键盘输入一个数,输出数组中指定元素的示例
2023-11-24 20:31:14
springmvc如何使用POJO作为参数
2021-06-02 00:29:46
![](https://img.aspxhome.com/file/2023/1/61831_0s.png)
Android ScrollView滑动实现仿QQ空间标题栏渐变
2021-06-13 16:32:19
![](https://img.aspxhome.com/file/2023/9/102579_0s.gif)
Java ThreadLocal的使用详解
2023-11-29 04:48:43
完美实现ExpandableListView二级分栏效果
2021-07-18 20:04:13
![](https://img.aspxhome.com/file/2023/1/92591_0s.jpg)
判断图片-判断位图是否是黑白图片的方法
2023-06-09 17:20:07
Java中ByteArrayInputStream和ByteArrayOutputStream用法详解
2023-03-01 11:22:48
![](https://img.aspxhome.com/file/2023/8/101978_0s.png)
2020年IntelliJ IDEA最新最详细配置图文教程详解
2022-08-19 00:07:51
Spring Batch批处理框架使用解析
2021-12-24 03:41:19
Android文本视图TextView实现聊天室效果
2022-02-15 07:31:55
![](https://img.aspxhome.com/file/2023/3/123363_0s.jpg)