本篇运用Button 进行界面布局,使用Service的两种启动方式,并对按钮进行事件监听,实现简单的音乐播放器
同时这也是中国大学慕课移动终端应用开发的网课作业16,我会持续更新我的作业,如果有需要关注一下吧
学习建议:
有关service的知识,我推荐此篇博文:务必知道的Android service的完全详解
代码部分:
1.MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button mButton1,mButton2,mButton3,mButton4;
ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//此项目较为简单啥也不用做
}
@Override
public void onServiceDisconnected(ComponentName name) {
//此项目较为简单啥也不用做
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
//启动音乐播放
mButton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"启动音乐播放",Toast.LENGTH_SHORT).show();
startService(MyMusicService.createIntent(MainActivity.this));
}
});
//停止音乐播放
mButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"停止音乐播放",Toast.LENGTH_SHORT).show();
stopService(MyMusicService.createIntent(MainActivity.this));
}
});
//绑定音乐播放
mButton3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"绑定音乐播放",Toast.LENGTH_SHORT).show();
bindService(MyMusicService.createIntent(MainActivity.this),mConnection, Context.BIND_AUTO_CREATE);
}
});
//解绑音乐播放
mButton4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"解绑音乐播放",Toast.LENGTH_SHORT).show();
unbindService(mConnection);
}
});
}
private void init(){
mButton1 = findViewById(R.id.button1);
mButton2 = findViewById(R.id.button2);
mButton3 = findViewById(R.id.button3);
mButton4 = findViewById(R.id.button4);
}
}
主布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="启动音乐播放"
android:textSize="25dp"
android:layout_marginTop="20dp"
android:background="#FCFAB7"/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="停止音乐播放"
android:textSize="25dp"
android:layout_marginTop="20dp"
android:background="#FAB8E7"/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="绑定音乐播放"
android:textSize="25dp"
android:layout_marginTop="20dp"
android:background="#DAFCB7"/>
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="解绑音乐播放"
android:textSize="25dp"
android:layout_marginTop="20dp"
android:background="#F37040"/>
</LinearLayout>
Service:MyMusicService.java
记得在AndroidManifest.xml中注册服务,或者直接使用as提供的快捷创建service功能,他会自动注册。
public class MyMusicService extends Service {
private MediaPlayer mMediaPlayer;
@Override
public void onCreate() {
super.onCreate();
mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.music);
mMediaPlayer.setLooping(true);//重复播放
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mMediaPlayer.start();//打开音乐
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
mMediaPlayer.stop();//关闭音乐
}
public MyMusicService() {
}
@Override
public IBinder onBind(Intent intent) {
mMediaPlayer.start();
return null;//这个项目不需要返回
}
@Override
public boolean onUnbind(Intent intent) {
mMediaPlayer.stop();
return super.onUnbind(intent);
}
/**
* 为什么这么写?
* 这是一种思想,写intent的最优固定模式
* 假设需要传递数据,就可以封装起来,具体可见:
* https://blog.csdn.net/baidu_41860619/article/details/104426980
* */
public static Intent createIntent(Context context){
return new Intent(context, MyMusicService.class);
}
}
音乐资源
在res下新建一个raw文件夹,将音频文件放入,命名为music.xxx
总结
如果有什么问题,请私信联系我或者在评论区留言
码字不易,若有帮助,给个关注和赞呗