Ho davvero cercato di passare attraverso intent.putExtra() e getIntent(). GetExtras() e applicarli a una delle esercitazioni di SimpleService. So che molte persone hanno già chiesto "perché gli extra del bundle sono sempre nulli?" Prometto che ho cercato di carpire le risposte che ho trovato qui per diverse ore prima di prendere in considerazione l'idea di postare, ma non credo di essere abbastanza avanzato da capire davvero cosa devo fare storto con i frammenti secondari che le persone pubblicano. Come tale ho inserito il codice completo della mia attività e del mio servizio.Android - Avvio di un servizio con informazioni aggiuntive tramite put/getExtra
Penso che il mio problema sia che il mio intento iniziale (quello che creo nella mia attività) non esiste nel contesto del mio servizio. Mi chiedo se forse sto usando Intents nella direzione/scopo sbagliati del tutto? Ho provato un intent.putExtra nel mio servizio, per provare a inviare una stringa nell'altra direzione, ma anche quegli extra sono sempre nulli. Quindi, a rischio di ripetizione, perché gli extra del bundle sono sempre nulli? Come faccio a fare un singolo intento che esiste sia nel contesto della mia attività sia nel mio servizio?
Devo notare che il codice come mostrato di seguito ovviamente avrà un extra nullo perché ho commentato alcuni dei miei tentativi di .getExtras() che hanno fallito. Ho cancellato il resto per motivi di pulizia.
MODIFICA: La risposta grazie alle risposte, in codice per il bene di coloro che sono stati anche su Google per ore. Mettere questo nel vostro servizio (si prega di notare che lo START_REDELIVER_INTENT ritorno può essere sbagliato):
@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;
}
mia attività (sulla base di blog di 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();
}
}
};
}
E questo è il mio servizio:
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();
}
}
Benvenuti in Stackoverflow! Se trovi che una risposta è utile, ti preghiamo di votarla. Se la risposta risponde correttamente alla tua domanda, fai clic sul segno di spunta verde accanto ad essa per accettare la risposta. Per favore guarda http://stackoverflow.com/questions/how-to-ask per un consiglio su come scrivere una buona domanda –
Kurtis, mi piace il tuo invito stock! Sono contento che qualcuno stia prendendo il tempo per informare i nuovi arrivati su come usare il servizio :) –
@Adam: Non capisco, scusa: il tuo codice di servizio alla fine NON ha il 'onStartCommand()' ?? –