Đầ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);
}
}};
0 nhận xét:
Đăng nhận xét