Các bạn đã đọc và hiểu về Service trong Part 1. Tiếp theo mình sẽ làm 1 demo nhỏ để các bạn hiểu rõ hơn về Service. Demo tạo 1 service chơi nhạc và người sử dụng có thể điều khiển service này.


Giao diện chương trình : 




Đầu tiên là tạo 1 giao diện điều khiển service chơi nhạc bằng layout đơn giản :

Mã:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip"     android:gravity="center_horizontal"     android:layout_width="fill_parent" android:layout_height="fill_parent">      <TextView         android:layout_width="fill_parent" android:layout_height="wrap_content"         android:layout_weight="0"         android:paddingBottom="4dip"         android:text="@string/local_service_binding"/>     <Button android:id="@+id/bind"         android:layout_width="wrap_content" android:layout_height="wrap_content"          android:text="@string/bind_service">         <requestFocus />     </Button>     <Button android:id="@+id/unbind"         android:layout_width="wrap_content" android:layout_height="wrap_content"          android:text="@string/unbind_service">     </Button>         <Button android:id="@+id/play"         android:layout_width="wrap_content" android:layout_height="wrap_content"          android:text="@string/Play">     </Button>     </LinearLayout>
Tạo 1 class LocalService.java extend từ Service và một lớp con LocalBinder thừa kế từ lớp Binder ( dùng để điều khiển service )

Mã:
public class LocalService extends Service {      public class LocalBinder extends Binder {         LocalService getService() {             return LocalService.this;         }     }  ..... }
Từ đó nạp chồng phương thức onBind bằng cách trả lại giá trị mBinder

Mã:
    private final IBinder mBinder = new LocalBinder();     @Override     public IBinder onBind(Intent intent) {    	    	         return mBinder;     }
Tạo một đối tượng MediaPlayer chơi nhạc đơn giản ( sử dụng để chơi file abc.mp3 đặt trong folder res/raw ):

Mã:
MediaPlayer mMediaPlayer;     public void startMp3Player() {     	mMediaPlayer = MediaPlayer.create(getApplicationContext(),                  R.raw.abc);     	mMediaPlayer.start();      }          public void mp3Stop() {     	mMediaPlayer.stop();     	mMediaPlayer.release();     }
Ở lớp LocalServiceBinding.java extend từ lớp Activity chúng ta chỉ cần để ý đến đối tượng mConnection có nhiệm vụ giám sát kết nối của service chơi nhạc.
Mã:
    private ServiceConnection mConnection = new ServiceConnection() {         public void onServiceConnected(ComponentName className, IBinder service) {             mBoundService = ((LocalService.LocalBinder)service).getService();                         Toast.makeText(LocalServiceBinding.this, R.string.local_service_connected,                     Toast.LENGTH_SHORT).show();         }          public void onServiceDisconnected(ComponentName className) {             mBoundService = null;             Toast.makeText(LocalServiceBinding.this, R.string.local_service_disconnected,                     Toast.LENGTH_SHORT).show();         }     };
Và xử lý sự kiện 3 button ( Bind, Unbin, Play/Stop )
Mã:
    private OnClickListener mBindListener = new OnClickListener() {         public void onClick(View v) {             bindService(new Intent(LocalServiceBinding.this,                      LocalService.class), mConnection, Context.BIND_AUTO_CREATE);             mIsBound = true;             mPlayButton.setEnabled(true);                      }     };      private OnClickListener mPlayListener = new OnClickListener() {         public void onClick(View v) {         		if(mPlayButton.getText() == "Play")         		{         			mBoundService.startMp3Player();         			mPlayButton.setText("Stop");         		}         		else         		{         			mBoundService.mp3Stop();         			mPlayButton.setText("Play");         		}	        	         }     };          private OnClickListener mUnbindListener = new OnClickListener() {         public void onClick(View v) {             if (mIsBound) {                 unbindService(mConnection);                 mIsBound = false;                 mPlayButton.setEnabled(false);             }         }     };  source: http://www.mediafire.com/?ymyyiynizlz