Realmente he intentado atravesar el intent.putExtra() y getIntent(). GetExtras() y aplicarlos a uno de los tutoriales de SimpleService. Sé que muchas personas ya han preguntado "¿por qué los extras del paquete siempre son nulos?" Prometo haber intentado hackear las respuestas que encontré aquí durante varias horas antes de considerar publicar, pero no creo que esté lo suficientemente avanzado como para entender realmente qué es lo que debo estar haciendo mal con los fragmentos menores que la gente está publicando. Como tal, puse el código completo de mi actividad y mi servicio.Android - Comenzando un servicio con información adicional a través de put/getExtra
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 intenciones en la dirección/propósito equivocado por completo. Probé un intent.putExtra en mi servicio, para tratar de enviar una cadena en la otra dirección, pero esos extras siempre son nulos, también. Entonces, a riesgo de repetir, ¿por qué los extras del paquete siempre son nulos? ¿Cómo puedo hacer un único intento que existe tanto en el contexto de mi actividad como de mi servicio?
Debería tener en cuenta que el código que se muestra a continuación obviamente tendrá unos extras nulos porque he comentado algunos de mis intentos de .getExtras() que han fallado. Eliminé el resto en aras de la limpieza.
EDITAR: La respuesta gracias a las respuestas, en código por el bien de aquellos que también han estado buscando en Google por horas. Poner esto en su servicio (tenga en cuenta que el START_REDELIVER_INTENT retorno puede ser malo):
@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 (basado en el blog de Sai Gita):
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 esta 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();
}
}
¡Bienvenido a Stackoverflow! Si encuentra que una respuesta es útil, vote por favor. Si la respuesta responde satisfactoriamente a su pregunta, haga clic en la marca de verificación verde al lado para aceptar la respuesta. También mire http://stackoverflow.com/questions/how-to-ask para obtener consejos sobre cómo escribir una buena pregunta –
Kurtis, me gusta su invitación de acciones. Me alegro de que alguien se tome el tiempo de informar a los recién llegados sobre cómo usar el servicio :) –
@ Adam: No lo entiendo, lo siento: su código de servicio al final NO tiene 'onStartCommand()' ?? –