2014-02-21 3 views
0

나는 시스템 서비스가 곧바로 접근 할 수 없다는 것을 읽고있다. onCreate()가 호출 된 후에 액세스해야합니다.Android : 활동이없는 시스템 서비스에 액세스 할 수 있습니까?

키보드 서비스를 만들고 있지만 센서와 같은 시스템 서비스에 액세스하고 싶습니다. 활동없이 이것을 할 수있는 방법이 있습니까?

InputMethodService를 상속하고 SensorEventListener를 구현하는 클래스를 이미 만들려고했습니다. onSensorChanged() 메서드를 구현하고 logcat에 인쇄하도록 지시하지만 결코 호출되지 않습니다. I는 방법 onCreateInputView()하는 I 센서 매니저 가속도계 정의 : 원함 InputMethodService 문맥에서 유래하고에서 onCreate 같은() 호출되어야 표시

특정 제안에 기초
public class MyInput extends InputMethodService implements SensorEventListener { 
    MyInputView MyInputView; 
    private SensorManager mSensorManager; 

    @Override 
    public View onCreateInputView() { 

     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 

     final MyInputView MyInputView = (MyInputView) getLayoutInflater().inflate(R.layout.MyInput, null); 

     this.MyInputView = MyInputView; 

     return MyInputView; 

    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 
     Log.d("called", "called"); 
    } 

} 

을 ... ]

+1

흥미로운 질문입니다. 또한 InputMethodService는 Context를 상속하므로 getSystemService() 메서드가 적어도 존재해야하며 onCreate() 라이프 사이클 메서드가 있어야합니다. onCreate()가 호출 된 후이 컨텍스트를 사용하여 원하는 서비스를 얻으려고하면 어떻게됩니까? –

+0

업데이트를 위해 설정하는 코드와 발사하지 않는 이벤트 방법은 어디에 있습니까? 이 시점에서 집단적 신념은 당신이하고 싶은 것이 * 가능한 * 것으로 보이므로 문제는 당신의 시도와 관련이 있습니다. 우리는 당신이 시도하고자하는 것을 정확히 보지 않고는 그것을 도울 수 없습니다. 일. –

+0

@ChrisStratton 첨부 된 내용은 – mino

답변

2

서비스를받는 동시에 이벤트 리스너를 등록해야합니다.

예를 들어 (레거시)의 ApiDemos에 프로젝트에서 다음 섹션을 참조하십시오 SDK 샘플 : 당신이 당신의 인스턴스를 전달 할 귀하의 경우

mSensorManager.registerListener(mGraphView, 
      SensorManager.SENSOR_ACCELEROMETER | 
      SensorManager.SENSOR_MAGNETIC_FIELD | 
      SensorManager.SENSOR_ORIENTATION, 
      SensorManager.SENSOR_DELAY_FASTEST); 

그것은, 이벤트 리스너를 구현하여 MyInput 클래스 자체입니다 그 대신에.

+0

젠장, 그게 뭔가 간단 할 거라는 걸 알았어.이 시간을내어 주셔서 대단히 감사합니다! – mino

3

getSystemService()Context의 인스턴스에서 호출 할 수 있으며, InputMethodService 다시 문맥에 그 기원을 추적하기 때문에, 당신은 한 통화가 onCreate() 방법 이후로, 그 안에 시스템 서비스에 대한 액세스 권한을 얻을 수 있습니다.

이 기능은 백그라운드 서비스에서 가속도계를 사용할 때와 동일하게 작동합니다. 가시적 인 활동이 시스템 서비스에 대한 액세스 권한을 얻는 데 필요한 것은 아닙니다.

+0

이것은 실제로 내가하고 싶은 일입니다. 나는 가속도계에 접근하고 싶다. 그러나 onCreate()가 호출되었는지 어떻게 확인할 수 있습니까? – mino

+1

@mino onCreate 구현의 메서드 본문에 부울 플래그를 설정할 수 있습니다. 그러나 일반적으로 시스템 서비스 액세스가 InputMethodService의 메서드 본문 안에 있으면 onCreate 이후에 호출됩니다 (외부에서 호출되는 정적 메서드가 아닌 경우). –

+0

여전히 작동하지 않는 것 같습니다. InputMethodService를 상속하고 SensorEventListener를 구현하는 클래스가 있습니다. onSensorChanged() 메서드를 구현하고 logcat에 인쇄하도록 지시하지만 결코 호출되지 않습니다. – mino

관련 문제