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用起來還是比較好用的,希望大家可以相互交流

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