Android的音乐播放器使用service

一、service的概念

     今天主要用的用到Android中service来播放音乐,为什么要使用 service来处理呢,经过查阅大量的资料,我发现如果把播放音乐这些操作放在activity里面来操作,很容易就把系统弄的特别卡,同时service并不是新开启了一个线程,如果你想在service里面执行耗时的操作,那就使用IntentService来操作。

二、示例

    接下来我们就直接讲整体吧。我们需要播放哪首音乐传递给service,这里同时涉及到了一个activity与service交互的问题,那么他们是怎样交互的呢,交互是这样实现的。通过Intent实现的,通过putExtra来实现。

package com.example.mediaplayer;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MediaService extends Service { 
	
	private MediaPlayer mediaPlayer;
	private int[] musics={R.raw.a1,R.raw.a2};
	//private MediaPlayer fo

	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
	}

	@Override
	@Deprecated
	public void onStart(Intent intent, int startId) {
		// TODO Auto-generated method stub
		super.onStart(intent, startId);
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		if(mediaPlayer != null){
			mediaPlayer.stop();
		}
		String data = intent.getStringExtra("data");
		if(data.equalsIgnoreCase("forward")){
			mediaPlayer=MediaPlayer.create(this,musics[0]);
		}else if(data.equalsIgnoreCase("left")){
			mediaPlayer=MediaPlayer.create(this, musics[1]);
		}
		
		if(mediaPlayer != null){
			mediaPlayer.start();
		}
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		mediaPlayer.release();
        stopSelf();
		super.onDestroy();
	}
	
	

}

我们首先需要覆盖这个方法onStartCommand,他是在service每次调用的时候都要执行的,
onCreate()只会第一次创建service来执行。
<pre name="code" class="java">package com.example.mediaplayer;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button btn1;
	private Button btn2;
	private Button btn3;
	private Intent intent;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btn1 = (Button)findViewById(R.id.button1);
		btn2 = (Button)findViewById(R.id.button2);
		btn3 = (Button)findViewById(R.id.button3);
		btn1.setOnClickListener(new OnClickListener() {
			
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				  
                intent=new Intent(MainActivity.this,MediaService.class);  
                intent.putExtra("data","forward");  
                startService(intent);  
			}
		});
		btn2.setOnClickListener(new OnClickListener() {
			
			public void onClick(View arg0) {
				// TODO Auto-generated method stub 
                intent=new Intent(MainActivity.this,MediaService.class);  
                intent.putExtra("data","left");  
                startService(intent);
			}
		});
	}

	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		//MediaService.s
		this.stopService(intent);
	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}



这里定义了三个按钮,通过不同的参数来实现不同的歌曲播放。

三、总结

service用起来还是比较好用的,希望大家可以相互交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章