2011-03-09 24 views
6

Ho creato un servizio che viene chiamato dall'attività principale e passandolo a una variabile semplice per accedere e brindare allo schermo dall'interno del servizio. Non riesco a trovare il codice giusto per accedere alla variabile dall'interno del servizio. Qualsiasi aiuto sarebbe molto apprezzato. Grazie.Android: Variabili di accesso passate al servizio

Main Activity chiamando il servizio da dentro un clic del pulsante ascoltatore:

@Override 
public void onClick(View v) { 

    Intent eSendIntent = new Intent(getApplicationContext(), eSendService.class); 

    eSendIntent.putExtra("extraData", "somedata"); 

    startService(eSendIntent); 

} 

eSendService codice della classe di servizio:

public class eSendService extends Service { 


    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 

      // This is the code that I am struggling with. Not sure how to access the 
      // variable that was set in the intent. Please advise. 
      // The below code gives the following error in eclipse: 
      //  The method getIntent() is undefined for the type eSendService 
      Bundle extras = getIntent().getExtras(); 

    } 

} 

Ancora una volta, grazie per qualsiasi aiuto. Non riesco proprio a trovare un semplice esempio là fuori che mi mostri come farlo. Grazie.

risposta

3

Qual è stato il problema con il codice originale? Stavi cercando di ottenere i dati prima di chiamare super.onCreate(), questo potrebbe essere il problema.

Penso che si desidera:

@Override 
public void onCreate() { 
    super.onCreate(); 

    Bundle extras = getIntent().getExtras(); 
    string extraData = extras.getString("extraData"); 

} 
+0

Ciao E Z Hart. L'ho provato anche dopo il metodo super.onCreate() senza modifiche. Eclipse sta sottolineando "getIntent()" e quando ho il mouse su di esso ottengo questo errore "Il metodo getIntent() non è definito per il tipo eSendService". Grazie per l'aiuto. – RayJamesFun

11

Ok, trovato finalmente la mia risposta e vogliono condividerlo per aiutare qualcun altro.

La risposta: onStart() o onStartCommand() (che dipende dall'API di destinazione) è l'intento che viene passato e chiamato dopo che startService() viene chiamato dall'attività. Ho pensato che l'intento fosse passato al metodo onCreate() ma in realtà è passato al comando start per i servizi.

@Override public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 
    String extras; extras = intent.getExtras().getString("extraData"); 
    Toast.makeText(this, extras, Toast.LENGTH_LONG).show(); 
} 
Problemi correlati