2013-01-15 1 views
2

브로드 캐스트 서비스 XYZ에서 비 정적 메서드를 호출하려고합니다. 부팅시 수신기가 서비스를 시작합니다. 실행중인 서비스에서 메소드를 실행할 생각이 있습니까? 이 포럼의 한 가지 해결책은 메서드를 정적으로 만들고 단일 패턴을 사용하여 실행하는 것입니다. 그러나 또 다른 방법이 있습니까? 바인더가있는 것 같습니까?브로드 캐스트에서 실행중인 서비스의 메서드를 실행하는 방법은 무엇입니까?

난 다음 clases이 예를 들어

// 편집 :

public class MyService extends Service{ 
    ..... 
    public void method(){ 
     //TODO 
    } 
} 
public class MyBroadcastReceiver extends BroadcastReceiver{ 
    ..... 
    public void onReceive(Context context, Intent intent) { 
    String intentAction=intent.getAction(); 
    if(intentAction.equals(Intent.ACTION_BOOT_COMPLETED)){ 
     //start service 
     Intent serviceIntent = new Intent(context, MyService.class); 
     context.startService(serviceIntent); 

    } 
    else{ 
    //TODO call method() in MyService 
    } 
} 

은 내가 어떻게 방법 method()를 호출 할 수 있습니까? 나는 context.getSystemService() 시스템 서비스와 함께 캐스트 할 수 있다는 것을 알고 있습니다. 하지만 내 서비스 객체를 어떻게 얻을 수 있습니까?

인사

+0

나는 당신이 성취하려는 것을 확신하지 못합니다. 서비스에서 브로드 캐스트 할 때 모든 활성 활동에서 해당 브로드 캐스트를들을 수 있습니다. 브로드 캐스트를 받으면 자신이 원하는대로 무엇이든 실행할 수 있습니다. 브로드 캐스트를 수신 할 때 서비스에서 메소드를 실행하려는 경우, 싱글 톤없이이를 수행 할 수 있습니다. – jlindenbaum

+0

내 서비스와 내 브로드 캐스트는 독립적 인 클립에 있습니다. 업데이 트에서 하나의 예를 들어 –

답변

4

당신은 Service 시작하는 의도에서 setAction를 사용하여 의도에 액션 문자열을 추가 할 수 있습니다. 서비스의 onStartcommand에서 인 텐트의 액션을 추출 할 수 있으며이를 기반으로 서비스의 메소드를 실행할 수 있습니다.

항상 startService을 사용하여 서비스에 명령을 보내면 서비스가 두 번 실행되지 않습니다. 이 서비스는 한 번 시작되거나 새로운 의도가 서비스에 전송됩니다.

그래서 부팅 완료 섹션에서 의도 액션을 원하는대로 설정하고 서비스를 시작해야합니다. else 블록을 완전히 제거 할 수 있습니다.

서비스에서 onStartCommand을 구현하고 인 텐트의 동작을 추출한 다음 해당 동작을 기반으로 방금 방법을 실행할 수 있습니다.

+0

물론,이 작품이 될 것입니다 :) 감사합니다 Logged –

관련 문제