2011-10-18 1 views
1

다음 코드를 실행하면 서비스 값이 null입니다. 그러나 onCreate (버튼처럼) 밖에서 뭔가를 호출하면 작동합니다.선언 후 onCreate에서 Android 서비스에 액세스

어떻게 사용자 입력 없이도 onCreate 메소드에서 액세스 할 수 있습니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    getApplicationContext().bindService(new Intent(ISoundControlService.class.getName()), 
     serConnSound, Context.BIND_AUTO_CREATE); 
    try { 
     soundService.start(); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

UPDATE : 서비스를 받고 ...

private ServiceConnection serConnSound = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     soundService = ISoundControlService.Stub.asInterface(service); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     soundService = null; 
    } 
}; 
+0

흠 .. 어떻게 soundService 변수를 초기화합니까? – HighFlyer

+0

자세한 내용은 – Jackie

답변

1

내가 말할 것이다 : 당신이 할 수없는 ServiceConnection의 요점이다

. 그것은 비동기 적으로 초기화되고 당신은 그 사실을 처리해야합니다. onServiceConnected을 호출하면 서비스를 이용할 수 있습니다. 그 콜백을 기다리고있는 한 서비스 변수는 null ...

+0

업데이트를 참조하십시오. 올바른 처리 방법은 onServiceonnected 메서드 및 브로드 캐스트를 호출하는 방송 수신자를 사용하는 것입니다. – Jackie

+0

무슨 뜻인지 이해가되지 않습니다. 'bindService'는 서비스를 요청하고'onServiceConnected'는 서비스가 시작되고 곧 사용할 준비가 될 때 호출됩니다. 그 때까지는 서비스를 사용할 수 없습니다. 'onServiceConnected'가 호출되지 않을 때'null '에 대한 서비스를 확인하거나 진행 대화 상자를 표시하십시오 ... – Knickedi

관련 문제