2015-01-28 2 views
1
사이에 작업을 넣은 사람은 아니다

내 방송 수신기는 여기에 두 서비스 사이의 작업 ..브로드 캐스트 리시버는이 개 서비스

이 코드

[첫 서비스로서]

class ServiceHandler extends Handler 
{ 
    @Override 
    public void handleMessage(Message msg) { 

     case Constants.MESSAGE_READ: 
      Log.d("MainService_Handler", "Service - MESSAGE_READ: "); 

      byte[] readBuf = (byte[]) msg.obj; 
      // construct a string from the valid bytes in the buffer 
      READ_DATA = readBuf; 
      String strBuf = new String(readBuf, 0, msg.arg1); 
      READ_STRING = strBuf; 
      Intent intent = new Intent(MainService.this, InputHelperService.class); 
      intent.setAction(InputHelperService.READ_MESSAGE); 
      intent.putExtra("read", readBuf[1]); 
      sendBroadcast(intent); 

      //inputCommitment(readBuf[0]); 

      break; 

[두 번째 서비스]

있습니다 넣은 사람은 아니다

public class InputHelperService extends InputMethodService {

public static String READ_MESSAGE = "com.example.eyelink.READMESSAGE"; 

@Override 
public int onStartCommand(Intent intent, int flags, int startId){ 
    Log.i("InputHelperService", "InputHelperService - onStartCommand()"); 

    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("READ_MESSAGE"); 
    registerReceiver(messageReceiver, intentFilter); 
    Log.i("InputHelperService", "InputHelperService - onStartCommand(): register the receiver"); 

    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy(){ 
    Log.i("InputHelperService", "InputHelperService: onDestroy()"); 
    unregisterReceiver(messageReceiver); 
} 

... 



public final BroadcastReceiver messageReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent){ 
     Log.i("InputHelperService", "InputHelperService: Broadcast onReceive()"); 
     if(intent.getAction().equals(READ_MESSAGE)){ 
      byte data = intent.getExtras().getByte("read"); 
      Log.i("InputHelperService", "InputHelperService: Broadcast onReceive() - " + data); 
     } 
    } 
}; 

하지만 내 수신자로부터 응답이 없습니다.

무엇이 잘못 되었나요? 여기

+0

이 * 첫 번째 서비스의 서비스 처리기 클래스는 내부 클래스입니다. –

+0

'sendBroadcast (intent);'메소드가 호출 될 때'InputHelperService' 서비스가 실행 중입니까? –

+0

예. 잘 돌아갑니다. –

답변

1

:

intentFilter.addAction ("READ_MESSAGE");

을 사용하여 수신자를 등록하고 브로드 캐스트를 보내기 위해 intentFilter을 준비하십시오. 로 동일한 작업 문자열을 사용 :

intentFilter.addAction(InputHelperService.READ_MESSAGE); 

하고 방송을 보내

Intent intent = new Intent(InputHelperService.READ_MESSAGE); 
    intent.putExtra("read", readBuf[1]); 
    sendBroadcast(intent); 
+0

Thx. 동일한 결과를 반환합니다. –

+0

브로드 캐스트는 명시 적 인 텐트를 사용합니다. 그래서 그것은 중요하지 않습니다 ... –

+2

다른 행동을 사용하는 @ 고리는 중요하지 않습니다 ?? 매니페스트에 브로드 캐스트를 등록하지 않으므로 중요합니다. –

관련 문제