Hướng dẫn lập trình cơ bản với Android phần 19

Đầ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);

     }

}};

Không có nhận xét nào: