【使用Service组件实现简单的音乐播放器功能 --Android基础】农村四月闲人少,勤学苦攻把名扬。这篇文章主要讲述使用Service组件实现简单的音乐播放器功能 --Android基础相关的知识,希望能为你提供帮助。
1、本例利用Service实现简单的音乐播放功能,下面是效果图。(点击开始播放开启服务,音乐播放,点击“停止播放”关闭服务,音乐停止播放。)
文章图片
2、核心代码:
MusicService.java:
package thonlon.example.cn.servicedemo;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.IBinder;
import java.io.IOException;
/**
* 绑定服务的时候被调用
*/
public class MusicService extends Service {
private MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* Service被创建后被调用
*/
@Override
public void onCreate() {
//播放本地资源的音乐
//mediaPlayer = MediaPlayer.create(this, R.raw.snh);
//播放文件系统的音乐
//File file = new File(Environment.getExternalStorageDirectory(), "zshyn.mp3");
//mediaPlayer = new MediaPlayer();
//try {
//mediaPlayer.setDataSource(file.getAbsolutePath()); //通过获取绝对路径来设置播放源头
//} catch (IOException e) {
//e.printStackTrace();
//播放网络中的音乐
mediaPlayer = new MediaPlayer();
Uri uri = Uri.parse("http://www.nxl123.cn/snh.mp3");
try {
mediaPlayer.setDataSource(this, uri); //或者直接mediaPlayer.setDataSource("http://www.nxl123.cn/snh.mp3");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Service被开始后调用
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mediaPlayer.prepareAsync(); //准备资源,可能阻塞主线程,所以要在子线程调用。在这里使用prepareAsync函数就可以了
//防止资源还没有准备完毕就播放音乐,所以要设置准备资源监听器
//表示当准备资源完成后,调用监听器中onPrepare方法
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start(); //开始播放音乐
}
});
//MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
return super.onStartCommand(intent, flags, startId);
}
/**
* Service被停止后调用
*/
@Override
public void onDestroy() {
mediaPlayer.stop(); //停止播放
mediaPlayer.release(); //释放准备的资源,如果还需要用到此对象则可先不销毁
}
}
MainActivity.java:
package thonlon.example.cn.servicedemo;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(this, MusicService.class);
switch (v.getId()) {
case R.id.btn_start_service:
startService(intent);
break;
case R.id.btn_stop_service:
stopService(intent);
break;
}
}
}
推荐阅读
- Android图片处理--缩放
- R apply() 函数和 tapply() 函数
- BurpSuite 抓安卓app包
- 安卓手机USB无法共享上网或卡顿的解决方法
- appm
- Android Studio 3.1.3正式版的新坑。。。
- PrimeFaces工具栏用法
- PrimeFaces steps用法
- PrimeFaces SplitButton使用实例