2011-03-09 4 views
6

Я создал службу, вызываемую из основного действия и передающую ей простую переменную для доступа к тостам на экран изнутри службы. Кажется, я не могу найти правильный код для доступа к переменной изнутри службы. Любая помощь будет принята с благодарностью. Благодарю.Android: Доступ к переменным, переданным службе

Основная деятельность вызова службы от внутри кнопки мыши слушателя:

@Override 
public void onClick(View v) { 

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

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

    startService(eSendIntent); 

} 

eSendService код класса обслуживания:

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

    } 

} 

Опять же, спасибо за любую помощь и все. Я просто не могу найти простой пример, который показывает мне, как это сделать. Благодарю.

ответ

3

Какая проблема заключалась в вашем исходном коде? Вы пытались получить данные перед вызовом super.onCreate(), это может быть проблемой.

Я думаю, что вы хотите:

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

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

} 
+0

Hi E Z Hart. Я попробовал это после метода super.onCreate(), без изменений. Eclipse подчеркивает «getIntent()», и когда я нахожусь над ним, я получаю эту ошибку «Метод getIntent() не определен для типа eSendService». Спасибо за вашу помощь. – RayJamesFun

11

Хорошо, нашел свой собственный ответ, наконец, и хочу поделиться им, чтобы помочь кому-либо еще.

Ответ: onStart() или onStartCommand() (который зависит от целевого api) - это то, что намерение передается и вызывается после запуска функции startService(). Я думал, что намерение было передано методу onCreate(), но оно фактически передается команде start для служб.

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