Mise à jour de l'activité par écoute des variables du service
Bonjour à tous,
j'ai une activité qui lance un service, lequel effectue des taches en background.
ACTIVITE :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
...
public class MainActivity extends Activity
{
MyService myService;
ServiceConnection myServiceConnection;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.application);
//Connexion au service
myServiceConnection = new
ServiceConnection()
{
@Override
public void onServiceDisconnected(ComponentName name)
{
myService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
myService = ((MyService.MyActivityBinder)service).getMyService();
//Méthode lancée lorsque le service est connecté
onServiceAvailable();
}
};
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
Intent bindIntent = new Intent(this, MyService.class);
bindService(bindIntent, myServiceConnection, Context.BIND_AUTO_CREATE);
}
public void onServiceAvailable()
{
//MISE A JOUR DE L'INTERFACE
((TextView) findViewById(R.id.valeur_adresse)).setText(String.valueOf(myService.exampleDeVariableAEcouter));
}
} |
SERVICE :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
...
public class MyService extends Service
{
//Déclaration des variables
String exampleDeVariableAEcouter = 0;
MyService myServiceS;
private IBinder myBinder = new MyActivityBinder();
public class MyActivityBinder extends Binder
{
MyService getMyService()
{
return MyService.this;
}
}
@Override
public IBinder onBind(Intent intent)
{
return myBinder;
}
@Override
public void onCreate()
{
super.onCreate();
//Lancement du thread de traitement
thread th = new thread();
th.execute();
}
public int onStartCommand(Intent intent, int flags, int startId)
{
return START_STICKY_COMPATIBILITY;
}
//Méthode pour lancer le traitement des données
class thread extends AsyncTask<Void, String, Void>
{
@Override
protected Void doInBackground(Void... inutilise)
{
while(true)
{
//MODIFICATION DES VALEURS DE LA VARIABLE exampleDeVariableAEcouter
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
return(null);
}
@Override
protected void onProgressUpdate(String... item)
{
}
@Override
protected void onPostExecute(Void inutilise)
{
}
}
} |
Lors du lancement de l'application, l'interface est bien mise à jour, mais une seule fois. La variable exampleDeVariableAEcouter change au cours du traitement et j'aimerais que l'interface puisse se mettre à jour dès qu'elle repère une modification de la variable.
J'ai suivi le tuto de nicodr23 à la lettre (ici : http://blog.developpez.com/android23...ion_de_service), mais j'ai une erreur avec
Code:
listeners = new ArrayList<IGoogleWeatherListener>();
( IGoogleWeatherListener cannot be resolved to a type)
Quelqu'un aurait une idée ? Je galère depuis 3 jours dessus.
Merci d'avance....