2010-02-12 3 views

Répondre

24

Vous pouvez appeler startService (intention) comme ceci:

MyObject obj = new MyObject(); 
Intent intent = new Intent(this, MyService.class); 
intent.putExtra("object", obj); 
startService(intent); 

L'objet que vous souhaitez envoyer doit mettre en œuvre Parcelable (vous pouvez vous référer à cette Percelable guide)

class MyObject extends Object implements Parcelable { 

    @Override 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     // TODO Auto-generated method stub 

    } 

} 

et avec le service, dans la méthode onStart() ou onStartCommand() pour le niveau api 5 et plus récent, vous pouvez obtenir l'objet:

MyObject obj = intent.getParcelableExtra("object"); 

C'est tout :)

+0

Comment envoyer plus d'une valeur de données à la parcelle? J'ai deux cordes que je dois envoyer. – jax

+0

intention.putExtra ("my.first.string", "quelque chose"); intention.putExtra ("my.second.string", "autre chose"); – hackbod

+0

Cela ne fonctionne toujours pas pour moi. J'ai fait tout ce qui précède mais j'ai toujours des problèmes. Comment est-ce que je suis censé passer l'état entier de l'objet par le biais de Parcelable? Je sais que je peux envoyer des types de base comme String et Arrays mais par objet contient des classes plus complexes que celles-ci. – jax

1

Comme Bino dit, vous devez avoir votre objet personnalisé implémenter l'interface Parcelable si vous voulez passer à un service via une intention. Cela rendra l'objet "sérialisable" au sens IPC Android, de sorte que vous puissiez le transmettre à l'objet d'un objet putExtra (String, Parcelable).

Pour les types primitifs simples, il existe déjà un tas de méthodes setExtra (String, primitive type). Comme je vous comprends, cependant, ce n'est pas une option pour vous, c'est pourquoi vous devriez aller chercher un colis.

8

Si vous ne voulez pas mettre en œuvre Parcelable et votre objet est sérialisable

utilisent ce

Dans l'expéditeur Activiy

Intent intent = new Intent(activity, MyActivity.class); 

Bundle bundle = new Bundle(); 
bundle.putSerializable("my object", myObject); 

intent.putExtras(bundle); 

startActivity(intent); 

Dans le récepteur:

myObject = (MyObject) getIntent().getExtras().getSerializable("my object"); 

Fonctionne bien pour moi l'essayer. Mais l'objet doit être sérialisable :)

+0

Pour moi si travaillé, mais je devais changer quelque chose, sur la partie émettrice: 'intention.putExtra (" passé objet ", bundle.getSerializable (" mon objet "));' Et sur la partie de réception: 'myObject = (MonObjet) intention.getExtras(). GetSerializable (" objet passé ");' – Ruocco

Questions connexes