在服务中播放音乐
2016-03-12 23:45
1111 查看
音乐播放器往往需要在服务中执行具体的播放逻辑,因为只有只有我们才能保证在退出activity的情况下音乐能够继续播放,所以我们应当在activity中开启服务,然后让服务去执行具体的操作。我们在avtivity的布局中写三个按钮,第一个是play,用来播放音乐,第二个是pause,用来暂停。第三个是exit,表示我们不打算继续播放音乐了。服务中的代码如下所示,
public class MyService extends Service { //我们定义三个action,从activity开启服务时传递对应的action执行对应的操作。 private final static String ACTION_START = "play"; private final static String ACTION_PAUSE = "pause"; private final static String ACTION_EXIT = "exit"; private MediaPlayer mediaPlayer; private boolean isPause = false; public MyService() { } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { String action = intent.getAction(); switch (action) { case ACTION_START:
//在这里我们有相应的判断,因为音乐中的播放有两种一种是你之前播放音乐播放到一半按了暂停,这时如果按播放,那么我们让音乐继续播放,也就是直接执行start方法。 if (isPause) { mediaPlayer.start(); isPause = true;
//如果我们第一次按播放,那么音乐从头播放,我们需要重置mediaplayer。 } else { mediaPlayer = MediaPlayer.create(this,R.raw.lingshen); mediaPlayer.start(); } break; case ACTION_PAUSE: if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.pause(); } break; case ACTION_EXIT: { exit(); break; } default: break; } return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { exit(); super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } public void exit() { if (mediaPlayer != null) {
再退出时我们需要释放mediaplayer对象。 mediaPlayer.release(); mediaPlayer = null; } } }activity文件
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button play, pause, exit; private final static String ACTION_START = "play"; private final static String ACTION_PAUSE = "pause"; private final static String ACTION_EXIT = "exit"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); play = (Button) findViewById(R.id.button1); pause = (Button) findViewById(R.id.button2); exit = (Button) findViewById(R.id.button3); play.setOnClickListener(this); pause.setOnClickListener(this); exit.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.button1: startService(new Intent(ACTION_START, null, MainActivity.this, MyService.class)); break; case R.id.button2: startService(new Intent(ACTION_PAUSE, null, MainActivity.this, MyService.class)); break; case R.id.button3: startService(new Intent(ACTION_EXIT, null, MainActivity.this, MyService.class)); break; default: break; } } }
mainfest文件
<serviceandroid:name=".MyService"android:enabled="true"android:exported="true"><intent-filter ><action android:name="play" ></action><action android:name="pause" ></action><action android:name="exit" ></action></intent-filter></service>
相关文章推荐
- 开发环境 : 库, FrameWork, Cocoa, Xcode
- Morse Code-神奇而朴实的摩斯电码
- 从B树、B+树、B*树谈到R 树
- 学习进度条(第二周)
- linux高级IO之readv/writev
- GCC 编译 参数
- Hello World!
- 关于wamp2.5系统找不到指定文件的一个解决办法
- Please read “Security” section of the manual to find out how to run mysqld as root!错误解决(转)
- Java之 将程序打包成jar包
- Unity3D 5 官方教程:标准着色器
- JAVA学习笔记03
- Rescue
- swift:swift与oc代码互相调用
- java中静态代码块的用法及其与静态方法的区别
- FTP服务器项目的一些整理
- FTP服务器项目的一些整理
- windows安装Ubuntu
- Java观察者设计模式
- 【GDKOI2016】D2T1染色大战