Hướng Dẫn Lập Trình Cơ Bản Với Android - Bai 5

Embed Size (px)

DESCRIPTION

Hướng Dẫn Lập Trình Cơ Bản Với Android - Bai 5

Citation preview

Hng dn lp trnh c bn vi Android - Bi 5

Hng dn lp trnh c bn vi Android - Bi 5

Rflink: http://diendan.vietandroid.com/cac-bai-hoc-co-kem-ma-nguon/835-huong-dan-lap-trinh-co-ban-voi-android-bai-5-a.htmlList tutorialBi 0 - Ci t v s dng Android vi EclipseBi 1 - C bn AndroidBi 2 - Xy dng giao din n ginBi 3 - ViewGroup v Custom AdapterBi 4 - Intent v Broadcast ReceiverBi 5 - ServiceBi 6 - SQLiteBi 7 - Content ProviderBi 8 : Thread & Handler (Coming soon)Android Service

4 Tutorial trc cc bn c 1 lng kin thc kha kh, tip sau y mnh xin gii thiu 1 khi nim c bn na trong android, l Service

Service l 1 trong 4 thnh phn chnh trong 1 ng dng Android ( Activity, Service, BroadcastReceiver, ContentProvider) thnh phn ny chy trong hu trng v lm nhng cng vic khng cn ti giao din nh chi nhc, download, x l tnh ton

Mt Service c th c s dng theo 2 cch:

- N c th c bt u v c cho php hot ng cho n khi mt ngi no dng n li hoc n t ngt. ch ny, n c bt u bng cch gi Context.startService() v dng bng lnh Context.stopService(). N c th t ngt bng lnh Service.stopSelf() hoc Service.stopSelfResult(). Ch cn mt lnh stopService() ngng Service li cho d lnh startService() c gi ra bao nhiu ln

- Service c th c vn hnh theo nh c lp trnh vic s dng mt Interface m n nh ngha. Cc ngi dng thit lp mt ng truyn ti i tng Service v s dng ng kt ni thm nhp vo Service. Kt ni ny c thit lp bng cch gi lnh Context.bindService() v c ng li bng cch gi lnh Context.unbindService(). Nhiu ngi dng c th kt ni ti cng mt thit b. Nu Service vn cha c khi chy, lnh bindService() c th ty khi chy n. Hai ch ny th khng tch bit ton b. Bn c th kt ni vi mt Service m n c bt u vi lnh startService(). V d, mt Service nghe nhc ch nn c th c bt u bng cch gi lnh startService() cng vi mt i tng Intent m nh dng c m nhc chi. Ch sau , c th l khi ngi s dng mun kim sot trnh chi nhc hoc bit thm thng tin v bi ht hin ti ang chi, th s c mt Activity to lp mt ng truyn ti Service bng cch gi bindService(). Trong trng hp nh th ny, stopService() s khng thc s ngng Service cho n khi lin kt cui cng c ng li.

Ging nh mt Activity, mt Service cng c cc phng thc chu k thi gian m bn c th ci t kim sot nhng s thay i trong trng thi ca n. Nhng nhng phng thc ca Service th t hn l ca Activity ch c 3- v chng th c s dng rng ri, khng c bo v.void onCreate()void onStart(Intent intent)void onDestroy()

Bng vic thc hin nhng phng thc ny, bn c th gim st 2 vng lp ca chu k thi gian ca mi ServiceEntire lifetime ca mt Service din ra gia thi gian onCreate() c gi ra v thi gian m onDestroy() tr li. Ging nh mt Activity, mt Service li tit hnh ci t ban u onCreate(), v gii phng tt c cc ti nguyn cn li onDestroy() V d, mt Service pht li nhc c th to ra mt lung v bt u chi nhc onCreate(),v sau lung chi nhc s dng li onCreate(),Active lifetime ca mt Service bt u bng mt lnh ti onStart(). yl phng thc c chuyn giao i tng Intent m c thng qua ti startService() Service m nhc s m i tng Intent quyt nh xem s chi loi nhc no v bt u pht nhc.Khng c callback tng ng no cho thi im Service ngng li khng c phng thc onStop()Cc phng thc onCreate() v onDestroy() c gi cho tt c cc Service d chng c c bt u bng Context.startService() hoc Context.bindService() hay khng. Tuy nhin th, onStart() ch c gi ra i vi cc Service bt u bng startService().Nu mt Service cho php nhng Service khc kt ni vi n th s c thm cc phng thc callback dnh cho Service thc hinIBinder onBind(Intent intent)boolean onUnbind(Intent intent)void onRebind(Intent intent)

Hm callback onBind() thng qua i tng Intent oc truyn n bindService v onUnbind() c chuyn giao i tng m c chuyn n. Nu Service ang c ch nh (binding), onBind() quay tr li knh thng tin m ngi dng s dng tng tc vi Service. Phng thc onUnbind() c th yu cu onRebind() c gi nu mt ngi dng kt ni vi Service

Biu di y minh ha cho cc phng thc callback ginh cho mt Service. Mc d, n phn tch cc Service c to ra thng qua startService vi cc Service m c to ra bng bindService(). Hy nh rng bt k Service no, cho d n c khi to nh th no th n vn c th cho php cc ngi dng kt ni ti n mt cch hiu qu nht, cho nn bt k Service no cng c th c ch nh thng qua cc cc phng thc onBind()v onUnbind()

Cc bn c v hiu v Service trong Part 1. Tip theo mnh s lm 1 demo nh cc bn hiu r hn v Service. Demo to 1 service chi nhc v ngi s dng c th iu khin service ny.

Giao din chng trnh :

u tin l to 1 giao din iu khin service chi nhc bng layout n gin :M:

To 1 class LocalService.java extend t Service v mt lp con LocalBinder tha k t lp Binder ( dng iu khin service )M:public class LocalService extends Service {

public class LocalBinder extends Binder {

LocalService getService() {

return LocalService.this;

}

}

.....

}

T np chng phng thc onBind bng cch tr li gi tr mBinderM: private final IBinder mBinder = new LocalBinder();

@Override

public IBinder onBind(Intent intent) {

return mBinder;

}

To mt i tng MediaPlayer chi nhc n gin ( s dng chi file abc.mp3 t trong folderres/raw):M:MediaPlayer mMediaPlayer;

public void startMp3Player() {

mMediaPlayer = MediaPlayer.create(getApplicationContext(),

R.raw.abc);

mMediaPlayer.start();

}

public void mp3Stop() {

mMediaPlayer.stop();

mMediaPlayer.release();

}

lp LocalServiceBinding.java extend t lp Activity chng ta ch cn n i tng mConnection c nhim v gim st kt ni ca service chi nhc.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 kin 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);

}

}

};

SourceCode :http://www.mediafire.com/?ymyyiynizlzP/S: Nh eo headphone khi chy chng trnh