Tout dans les Intents!
Intent i = new Intent(DisplayDetail.this, MarkedMap.class);
ArrayList<Marker> mm = new ArrayList<Marker>();
mm.add(new Marker(1, 2, 3));
i.putParcelableArrayListExtra("markers", mm);
startActivityForResult(i, CODE_REQ_MARKER);
Avec un ContentProvider
Cursor cur = managedQuery(myPerson, null, null, null, null);
if (cur.moveToFirst()) {
String name;
String phoneNumber;
int nameColumn = cur.getColumnIndex(People.NAME);
int phoneColumn = cur.getColumnIndex(People.NUMBER);
String imagePath;
do {
// Get the field values
name = cur.getString(nameColumn);
phoneNumber = cur.getString(phoneColumn);
// Do something with the values.
...
} while (cur.moveToNext());
}
(exemple pris sur developer.android.com)
L’héritage, tout simplement
Intent dbServiceIntent = new Intent("com.oxiane.service.DBService");
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name,IBinder service) {
Log.d("dbService", callingClassName + " Connected");
dbService = ((DBService.MyServiceBinder) service).getService();
serviceConnectionIsReady();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d("dbService", callingClassName + " Disconnected");
}
};
bindService(dbServiceIntent, conn, Context.BIND_AUTO_CREATE);
Note: la méthode serviceConnectionIsReady() est une méthode que j’ai mise en abstraite dans la superclass de mes Activity. Chaque Activity va donc devoir l’implémenter. Un bon exemple d’utilisation est, par exemple, d’afficher une barre de progression « Loading… » puis, dans la méthode serviceConnectionIsReady(), vous avec accès à vos données, donc vous pouvez afficher votre vue avec les données.
Il reste encore un souci: dans ce cas d’utilisation, chaque Activity qui appelle ce bout de code va lancer le service et l’arrêter quand l’Activity meurt. Ce qu’on veut, nous, c’est que le service soit lancé tout le temps, et que chaque Activity puisse à sa guise, se connecter ou non au service.
On pourrait faire simplement un « startService » dans un coin, sur la première Activity de l’application. Mais ce serait trop simple, non? Et on risque d’oublier que c’est dans telle ou telle Activity que le service est démarré. Et il faudrait changer de place ce code si on décide que c’est finalement une autre Activity qui se lance en premier…
Au lieu de ça, il suffit de vérifier si notre service « com.oxiane.service.DBService » est lancé ou non:
Lister les services qui tournent sur votre machine
Il y’a justement un service Android qui est fait pour ça! Le service ACTIVITY_SERVICE:
final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
Et voilà, plus qu’à parcourir cette liste, et on peut lancer le service s’il n’existe pas, ou s’y connecter s’il existe!
for (int i = 0; i < services.size(); i++) {
if ("com.oxiane.service.DBService".equals(services.get(i).service.getClassName())) {
isServiceFound = true;
break;
}
}
if(isServiceFound)
{
Log.d("oxianeService", "Service trouvé, je me connecte!");
bindService(dbServiceIntent, conn, Context.BIND_AUTO_CREATE);
}
else
{
Log.d("oxianeService", "Service NON trouvé, je le crée puis je me connecte");
startService(dbServiceIntent);
}