2011-03-14 8 views
17

parametresi ile hizmeti başlat Servisimi Activiy'den başlatmak için startService(MyService.class) kullanın. Bu harika çalışıyor, ancak özel bir durumda hizmet farklı başlatılmalıdır. Servis başlangıcına bazı parametreler iletmek istiyorum. Kullandığım benim hizmet etAndroid:

Intent startMyService= new Intent(); 
startMyService.setClass(this,LocalService.class); 
startMyService.setAction("controller"); 
startMyService.putExtra(Constants.START_SERVICE_CASE2, true); 

startService(startMyService); 

:

benim Aktivite aşağıdaki çalıştı

public class MyIntentReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equals("controller")) 
     { 
       // Intent was received        
     } 

    } 
} 

IntentReceiver böyle onCreate() kayıtlıdır:

IntentFilter mControllerIntent = new IntentFilter("controller"); 
MyIntentReceiver mIntentReceiver= new MyIntentReceiver(); 
registerReceiver(mIntentReceiver, mControllerIntent); 

Bu çözümle servis başlar, ancak niyet alınmaz. Bir Hizmeti nasıl başlatıp parametreleri değiştirebilirim?

Yardımlarınız için teşekkürler!

+0

için MyIntentReceiver nedir? Belirli bir yayını dinlemek ve servis davranışınızı değiştirmek mi istiyorsunuz? – Audrius

+0

@Audrius: Evet, haklısın. MyIntentReceiver, hizmetimin davranışını değiştirmek için kullanılır. Hizmetimde 2 durum var: Biri hizmet başlatırken, hizmet çalışırken başka bir tane. – Mike

cevap

14

Adım # 1: BroadcastReceiver uygulanmasını silin.

2. Adım: Intent hizmetinizin onStartCommand() numaralı telefonuna girip getAction() aracılığıyla eyleme bakın.

+2

Ancak bu, yalnızca onCreate'dan sonra hizmetin değiştirilmesine izin verecektir. Ben OnCreate içinde değişken geçirmek istiyorum, sonra nasıl yapılacağını –

24
Intent serviceIntent = new Intent(this,ListenLocationService.class); 
serviceIntent.putExtra("From", "Main"); 
startService(serviceIntent); 
//and get the parameter in onStart method of your service class 

@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 
    Bundle extras = intent.getExtras(); 

    if(extras == null) { 
     Log.d("Service","null"); 
    } else { 
     Log.d("Service","not null"); 
     String from = (String) extras.get("From"); 
     if(from.equalsIgnoreCase("Main")) 
      StartListenLocation(); 
    } 
} 
+3

Ayrıca ' –

+1

ait onStartCommand yönteminde niyet nesneyi alabilirsiniz – grim

+0

Şimdi "onStartCommand" olduğunu' onHandleIntent (Niyet niyet) gibi sıra hizmet sınıfının – Ton