2011-03-09 11 views
6

Utworzyłem usługę, która jest wywoływana z głównej aktywności i przekazuje mu prostą zmienną, aby uzyskać dostęp i toast na ekranie z poziomu usługi. Nie mogę znaleźć odpowiedniego kodu dostępu do zmiennej z wnętrza usługi. Każda pomoc będzie bardzo ceniona. Dzięki.Android: zmienne dostępu przekazane do usługi

Main Activity wywołanie usługi od wewnątrz przycisk click słuchacza:

@Override 
public void onClick(View v) { 

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

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

    startService(eSendIntent); 

} 

eSendService kod klasy usługi:

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

    } 

} 

Ponownie dzięki za wszelkie pomocne. Po prostu nie mogę znaleźć prostego przykładu, który pokazuje mi, jak to zrobić. Dzięki.

Odpowiedz

3

Jaki problem stanowił Twój oryginalny kod? Próbujesz uzyskać dane przed wywołaniem super.onCreate(), to może być problem.

Myślę, że chcesz:

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

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

} 
+0

Witam E Z Hart. Próbowałem go również po metodzie super.onCreate() bez żadnych zmian. Eclipse podkreśla "getIntent()" i po kliknięciu myszką otrzymuję ten błąd "Metoda getIntent() jest niezdefiniowana dla typu eSendService". Dzięki za pomoc. – RayJamesFun

11

Ok, znalazłem moją własną odpowiedź ostatecznie i chcesz się nim podzielić, aby pomóc nikogo innego.

Odpowiedź: onStart() lub onStartCommand() (która zależy od celu docelowego) są tym, do czego cel został przekazany i wywołany po wywołaniu funkcji startService() przez działanie. Myślałem, że zamiar został przekazany do metody onCreate(), ale w rzeczywistości jest przekazywany do polecenia start dla usług.

@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(); 
} 
Powiązane problemy