2011-03-14 40 views
17

Để bắt đầu dịch vụ của tôi từ Activiy I, hãy sử dụng startService(MyService.class). Điều này làm việc tuyệt vời, nhưng trong trường hợp đặc biệt, dịch vụ nên được bắt đầu khác nhau. Tôi muốn chuyển một số tham số cho dịch vụ bắt đầu.Android: bắt đầu dịch vụ với thông số

Tôi đã thử các sau đây trong Hoạt động của tôi:

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

startService(startMyService); 

Trong Dịch vụ của tôi, tôi sử dụng:

public class MyIntentReceiver extends BroadcastReceiver { 

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

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

    } 
} 

Các IntentReceiver được đăng ký trong onCreate() như thế này:

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

Với giải pháp này, dịch vụ bắt đầu nhưng không nhận được ý định. Tôi làm cách nào để bắt đầu Dịch vụ và chuyển các thông số của mình?

Cảm ơn sự giúp đỡ của bạn!

+0

MyIntentReceiver for? Bạn có muốn nghe một số chương trình phát sóng cụ thể và thay đổi hành vi dịch vụ của mình không? – Audrius

+0

@ Audrius: Vâng, bạn nói đúng. MyIntentReceiver được sử dụng để thay đổi hành vi của dịch vụ của tôi. Có 2 trạng thái trong dịch vụ của tôi: Một khi bắt đầu dịch vụ, một dịch vụ khác khi dịch vụ đang chạy. – Mike

Trả lời

14

BướC# 1: Xóa triển khai BroadcastReceiver của bạn.

BướC# 2: Kiểm tra Intent dịch vụ của bạn nhận được trong onStartCommand() và xem hành động qua getAction().

+2

Nhưng điều này sẽ chỉ cho phép thay đổi dịch vụ sau khi onCreate. Tôi muốn chuyển biến trong oncreate, sau đó làm thế nào để làm điều đó –

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

Bạn cũng có thể lấy đối tượng intent trong phương thức onStartCommand của lớp dịch vụ –

+1

Cũng như trong 'onHandleIntent (Intent intent)' – grim

+0

Bây giờ nó nằm trong "onStartCommand" – Ton

Các vấn đề liên quan