Android - Démarrage d'un service avec des informations supplémentaires par le biais de vente/getExtra

J'ai vraiment essayé d'obtenir par le biais de l'intention.putExtra() et getIntent().getExtras() et de les appliquer à l'un des SimpleService tutoriels. Je sais que beaucoup de gens ont déjà demandé "pourquoi est-ce bundle extras toujours null?" Je vous promets que j'ai essayé de pirater à travers les réponses que j'ai trouvé ici pendant plusieurs heures avant que je considéré comme annonce, mais je ne pense pas que je suis assez avancé pour vraiment comprendre ce que c'est que je doit faire mal avec le mineur extraits de gens sont à poster. En tant que tel, j'ai mis dans le code complet de mon activité et de mon service.

Je pense que mon problème est que mon intention de départ (celui que j'ai créer dans mon activité) n'existe pas dans le cadre de mon service. Je me demande si je vais peut-être l'aide d'Intentions dans le mauvais sens et le but de tout? Je l'ai fait essayer à une intention.putExtra dans mon service, pour essayer d'envoyer une chaîne de caractères dans une autre direction, mais ces extras sont toujours nulles, trop. Donc, au risque de la répétition, pourquoi est-bundle extras toujours null? Comment puis-je faire une seule intention qui existe à la fois dans le cadre de mon activité et de mon service?

Je note que le code affiché ci-dessous devront évidemment null extras parce que j'ai commenté quelques-uns de mes tentatives .getExtras() qui ont échoué. J'ai supprimé le reste pour le bien de propreté.

EDIT: La réponse merci pour les réponses, dans le code, pour le bien de ceux qui ont aussi cherché sur Google pendant des heures. Mettez ceci dans votre service (veuillez noter que le retour START_REDELIVER_INTENT trompe peut-être):

@Override
public int onStartCommand( Intent intent , int flags , int startId )
{
      super.onStartCommand(intent, flags , startId);

      extras = intent.getExtras();

          //just checking
      if( extras != null )
      Toast.makeText(this,extras.getString("extratoservice"), Toast.LENGTH_SHORT).show();

      return START_REDELIVER_INTENT;

}

Mon activité (basé sur Sai Geetha blog):

package com.example.BroadcastIntent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class BroadcastIntentActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button start = (Button)findViewById(R.id.buttonStart);
start.setOnClickListener(startListener);
Button stop = (Button)findViewById(R.id.buttonStop);
stop.setOnClickListener(stopListener);   
//the intent I'm using to start and stop the service -- the extras don't go anywhere....
intent = new Intent(BroadcastIntentActivity.this,BroadcastService.class);     
intent.putExtra("extratoservice", "if you can read this, it made it to the service" );
}
Boolean serviceRunning;
Intent intent;
//Clicks from Geetha's Blog
private OnClickListener startListener = new OnClickListener() {
public void onClick(View v){
startService(intent);
serviceRunning = true;
}                 
};
private OnClickListener stopListener = new OnClickListener() {
public void onClick(View v){
try
{
stopService(intent);
serviceRunning = false;                
}
catch( Exception e)
{
Toast.makeText(getApplicationContext(), "Service was not running...",Toast.LENGTH_SHORT).show(); 
}
}                 
};
}

Et c'est mon service:

package com.example.BroadcastIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;
public class BroadcastService extends Service{
@Override
public IBinder onBind(Intent arg0) {
//TODO Auto-generated method stub
//extras = arg0.getExtras();    <-- this has null extras, too...
return null;
}
Bundle extras;
@Override
public void onCreate() {
super.onCreate();
//extras = getIntent().getExtras();   <-- this is undefined?
if( extras == null )
Toast.makeText(this,"Service created... extras still null", Toast.LENGTH_SHORT).show();
else
Toast.makeText(this,extras.getString("extratoservice"), Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_SHORT).show();
}
}
Bienvenue sur Stackoverflow! Si vous trouvez une réponse est utile, veuillez jusqu'vote. Si la réponse répondu correctement à votre question, veuillez cliquez sur la coche verte à côté d'elle pour accepter la réponse. Aussi veuillez jeter un oeil à stackoverflow.com/questions/how-to-ask pour plus de conseils sur comment écrire une bonne question
Kurtis, j'aime votre stock invitation! Je suis content que quelqu'un est prendre le temps d'informer les nouveaux arrivants de la façon d'utiliser le service 🙂
Je ne comprends pas, désolé: le code de votre service à la fin n'a PAS le onStartCommand()??

OriginalL'auteur Adam | 2011-11-13