Android – Iniciar un servicio con información adicional a través de put / getExtra

Realmente he intentado pasar a través de los intentos.putExtra () y getIntent (). GetExtras () y aplicarlos a uno de los tutoriales de SimpleService. Sé que mucha gente ya ha preguntado "¿por qué los extras del paquete siempre son nulos?" Prometo que traté de hackear a través de las respuestas que encontré aquí durante varias horas antes de considerar la publicación, pero no creo que estoy lo suficientemente avanzado como para realmente entender lo que es que debo estar haciendo mal con los pequeños fragmentos de personas están publicando. Como tal puse en el código completo de mi actividad y mi servicio.

Creo que mi problema es que mi intención inicial (la que creo en mi actividad) no existe en el contexto de mi servicio. Me pregunto si tal vez estoy usando intentos en la dirección equivocada / propósito por completo? He intentado un intento.putExtra en mi servicio, intentar enviar una secuencia la otra dirección, pero esos suplementos son siempre nulos, también. Así que, con el riesgo de repetición, ¿por qué los extras del paquete siempre son nulos? ¿Cómo hago una sola intención que existe tanto en el contexto de mi actividad como de mi servicio?

Debo tener en cuenta que el código que se muestra a continuación obviamente tendrá un extras nulo porque he comentado algunos de mis intentos de .getExtras () que han fallado. He eliminado el resto por el bien de la limpieza.

EDIT: La respuesta gracias a las respuestas, en código para el bien de aquellos que también han estado buscando en Google durante horas. Ponga esto a su servicio (tenga en cuenta que la devolución START_REDELIVER_INTENT puede estar equivocada):

@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; } 

Mi actividad (basada en el blog de Sai Geetha):

 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(); } } }; } 

Y este es mi servicio:

 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(); } } 

Usted necesita mirar la función de onStartCommand () (no estoy en un escritorio así que no puedo convenientemente acoplar al javadoc). Esto recibirá la intención que aprobó y sus extras deben estar disponibles allí.

Creo que necesitas hacer esto en tu servicio ..

  @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); 

Para obtener la intención que está pasando … pero no estoy 100% en esto, así que verifique http://developer.android.com/reference/android/app/Service.html

  • Servicio de primer plano que se está matando en el clic de notificación
  • ¿Dónde debo usar Servicio, AsyncTask y Broadcast Receiver?
  • ¿Cómo puedo eliminar una notificación de primer plano en Android Lollipop?
  • Async tarea no funciona correctamente (doInBackground no se ejecuta) cuando el servicio se ejecuta en segundo plano, Android
  • OnTaskRemoved () no se llama en dispositivos HUAWEI y XIOMI
  • ¿Hay alguna forma de punto de ruptura dentro de las clases probadas?
  • Obtener la lista de procesos en ejecución y eliminar sus servicios de fondo
  • Inicie Android Service cada 5 minutos
  • Error "No se puede iniciar el servicio de intención" al iniciar el servicio desde una actividad en Android
  • Observable vs. Servicio en Android
  • StopService no deja de ser mi servicio ... ¿por qué?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.