Demo tạo 1 service chơi nhạc và người sử dụng có thể điều khiển service này sẽ giúp người học android có cái nhìn rõ hơn về service
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/andro
id” 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);
}
}
};
Mã:
<LinearLayout
xmlns:android=“http://schemas.android.com/apk/res/andro
id” 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