Download - Tutor i El Android Broadcast Receiver
-
7/28/2019 Tutor i El Android Broadcast Receiver
1/15
1
TutorielAndroid
Communicationentreservices
BroadCastReceiverRomainRaveaux
Prambule.................................................................................................................................1
Prrequis...................................................................................................................................2
Architecture...............................................................................................................................3
EnvoidunmessageauServiceS1..........................................................................................5
Miseenuvre..........................................................................................................................6
ModificationduManifest......................................................................................................7
Lesclassesdututorial................................................................................................................8ClasseServiceS1.....................................................................................................................9
ClasseServiceS2...................................................................................................................11
ClasseTutoActivity..............................................................................................................13
Manifestdelapplication.....................................................................................................15
Prambule
LesservicesnepeuventpascommuniquerparlebiaisdelinterfaceIBinder.LacommunicationparIBindernepermetquelacommunicationentreuneActivityetun
service.LasolutionpourrsoudreleproblmeestdutiliserlesBroadCastReceiver
ServiceS1 ServiceS2message
-
7/28/2019 Tutor i El Android Broadcast Receiver
2/15
2
PrrequisSavoirdmarreretarrterunservice.
SavoircreruneapplicationAndroid.
-
7/28/2019 Tutor i El Android Broadcast Receiver
3/15
3
ArchitectureOncreunserviceServiceS1avecdeuxvariables:Unedonneenvoyeretunevariable
pourrecevoirunmessage.
publicclass ServiceS1 extends Service {String datatosend ="ping";
String receiveddata;
@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturnnull;
}
/**
* @param args*/publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub}
A lintrieur de la classe ServiceS1 , on cre une classe
BroadCastReceiver.
publicclass S1Receiver extends BroadcastReceiver {@Overridepublicvoid onReceive(Context context, Intent arg1) {
// TODO Auto-generated method stubToast.makeText(context, "reu !!!"
,Toast.LENGTH_LONG ).show();
Log.d(this.getClass().getName(), "reu !!!");receiveddata = arg1.getExtras().getString("id");Toast.makeText(context, receiveddata
,Toast.LENGTH_LONG ).show();
}
}
}
-
7/28/2019 Tutor i El Android Broadcast Receiver
4/15
4
OncreleconstructeurduserviceServiceS1 . La variable messageReceiver
estuneinstancedeS1Receiver. Il faut enregistrer le S1Receiver pour
avertir lapplication que le service ServiceS1 possde un BroadCast
Receiver qui pourra tre appel par dautres services.
MESSAGE_S1 est lidentifiant du BroadCast Receiver S1Receiver.
S1Receiver messageReceiver;publicstatic String MESSAGE_S1 = "MESSAGE_S1";public ServiceS1(){
super() ;
messageReceiver = new S1Receiver();registerReceiver(messageReceiver, new
IntentFilter(MESSAGE_S1));
}
-
7/28/2019 Tutor i El Android Broadcast Receiver
5/15
5
EnvoidunmessageauServiceS1
Pourillustrerlacommunicationentredeuxservices,nousavonsbesoindedeuxservices.
On cre un autre service ServiceS2 .
publicclass ServiceS2 extends Service {String datatosend ="pong";
String receiveddata;
@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturnnull;
}
/**
* @param args*/publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub}
}
LorsdudmarrageduserviceS2,cedernierenverraunmessageauserviceS1.
LeserviceS2envoieparlebiaisdelamthodesendBroadcastunIntentcontenantla
variabledatatosend.
Intent sender = new Intent(ServiceS1.MESSAGE_S1);sender.putExtra("id", datatosend);
sendBroadcast(sender);
-
7/28/2019 Tutor i El Android Broadcast Receiver
6/15
6
MiseenuvreLesservicessexcutententchedefonddemanireparallle.
Pourexprimenternotrecommunicationentreservicesnousavonsbesoinduneactivit
avecunboutonpermettantdedmarrerlesservices.
Dmarragedelactivit
Dmarragedu
serviceS1
Dmarragedu
serviceS2
EnvoidumessageaS1
Miseenplacedu
BroadCastReceiver
Rceptiondu
message
temps
-
7/28/2019 Tutor i El Android Broadcast Receiver
7/15
7
VoicilecodedelamthodeonCreatedelactivit.Lorsdelappuiesurunbouton,on
dmarreleserviceS1etleserviceS2.
@Overridepublicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.tutolayout);
start = (Button) this.findViewById(R.id.button1);start.setOnClickListener(new Button.OnClickListener(){
@Override
publicvoid onClick(View v) {// TODO Auto-generated method stub
Intent starter = newIntent(TutoActivity.this,ServiceS1.class);
startService(starter);
starter = newIntent(TutoActivity.this,ServiceS2.class);
startService(starter);
}
});
}
ModificationduManifest
Danslemanifestdelapplication,ilfautrajouterladclarationdesservicesentrelesbalises
application.
-
7/28/2019 Tutor i El Android Broadcast Receiver
8/15
8
Lesclassesdututorial
-
7/28/2019 Tutor i El Android Broadcast Receiver
9/15
9
ClasseServiceS1
packagecom.example.carteauxtresors.services;
importcom.example.carteauxtresors.services.Ordonnanceur.MyReceiver;
importandroid.app.Service;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.IntentFilter;
importandroid.os.IBinder;
importandroid.util.Log;
importandroid.widget.Toast;
publicclassServiceS1extendsService{
Stringdatatosend="ping";
Stringreceiveddata;
S1ReceivermessageReceiver;
publicstaticStringMESSAGE_S1="MESSAGE_S1";
publicServiceS1(){
super();
}
@Override
publicintonStartCommand(Intentintent,intflags,intstartId){
Log.d(this.getClass().getName(),"onStart");
Log.d("LocalService","Receivedstartid"+startId+":"+intent);
messageReceiver=newS1Receiver();
registerReceiver(messageReceiver,newIntentFilter(MESSAGE_S1));
returnSTART_NOT_STICKY;
}
@Override
publicIBinderonBind(Intentarg0){
//TODOAuto-generatedmethodstub
returnnull;
}
/**
*@paramargs
*/ publicstaticvoidmain(String[]args){
-
7/28/2019 Tutor i El Android Broadcast Receiver
10/15
10
//TODOAuto-generatedmethodstub
}
publicclassS1ReceiverextendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext,Intentarg1){
//TODOAuto-generatedmethodstub
Toast.makeText(context,"S1reu!!!",Toast.LENGTH_LONG).show();
Log.d(this.getClass().getName(),"S1reu!!!");
receiveddata=arg1.getExtras().getString("id");
Toast.makeText(context,receiveddata,Toast.LENGTH_LONG).show();
}
}
@Override
publicvoidonDestroy(){
Log.d(this.getClass().getName(),"onDestroy");
unregisterReceiver(messageReceiver);
}
}
-
7/28/2019 Tutor i El Android Broadcast Receiver
11/15
11
ClasseServiceS2
package com.example.carteauxtresors.services;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.IBinder;import android.util.Log;import android.widget.Toast;publicclass ServiceS2 extends Service {
String datatosend ="pong";
String receiveddata;
public ServiceS2(){super();}
@Overridepublicint onStartCommand(Intent intent, int flags, intstartId) {
Log.d(this.getClass().getName(), "onStart");Log.d("LocalService", "Received start id " + startId + ":
" + intent);
Intent sender = new Intent(ServiceS1.MESSAGE_S1);sender.putExtra("id", datatosend);
sendBroadcast(sender);
returnSTART_NOT_STICKY;}
@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturnnull;
}
/**
* @param args*/publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
-
7/28/2019 Tutor i El Android Broadcast Receiver
12/15
12
}
@Override
publicvoid onDestroy() {Log.d(this.getClass().getName(), "onDestroy");
}
}
-
7/28/2019 Tutor i El Android Broadcast Receiver
13/15
13
ClasseTutoActivity
package com.example.carteauxtresors;import com.example.carteauxtresors.services.Ordonnanceur;import com.example.carteauxtresors.services.ServiceS1;import com.example.carteauxtresors.services.ServiceS2;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;publicclass TutoActivity extends Activity {
/**
* @param args*/publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub}
private Button start;@Overridepublicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.tutolayout);
start = (Button) this.findViewById(R.id.button1);start.setOnClickListener(new Button.OnClickListener(){
@Overridepublicvoid onClick(View v) {// TODO Auto-generated method stub
Intent starter = newIntent(TutoActivity.this,ServiceS1.class);
startService(starter);
starter = newIntent(TutoActivity.this,ServiceS2.class);
startService(starter);
-
7/28/2019 Tutor i El Android Broadcast Receiver
14/15
14
}
});
}
}
-
7/28/2019 Tutor i El Android Broadcast Receiver
15/15
15
Manifestdelapplication