2009-06-29 2 views
10

Android 플랫폼 용 애플리케이션을 구축 중이며 가속도계를 사용하고 싶습니다. 지금, 나는 센서 시뮬레이션 (OpenIntents' SensorSimulator)을위한 아주 좋은 어플리케이션을 찾았지만, 내가하고 싶은 일을 위해서, 나는 자신의 센서 시뮬레이터 어플리케이션을 만들고 싶다.Android 용 센서 시뮬레이터를 만드는 방법은 무엇입니까?

내가 해체하는 방법에 대한 정보를 찾지 못했습니다 (시뮬레이터의 항아리가 정확한지 모르겠다). 그리고 말했듯이, 센서 시뮬레이터의 작고 간단한 버전을 만들고 싶습니다. 내 의도에 더 적합합니다.

어디에서 시작할 수 있습니까? 빌드해야하는 코드 조각은 어디에서 볼 수 있습니까?

기본적으로 모든 방향에 대해 묻습니다.

답변

8

음, 에뮬레이터에서 테스트하는 동안 응용 프로그램에서 Android 장치의 센서를 에뮬레이트 할 응용 프로그램이 필요합니다.

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

왜 방법이 SensorManager에서 사용할 수있는 인터페이스를 만들 수 없습니다 :
아마 응용 프로그램에서,이 같은 라인이

interface MySensorManager { 
    List<Sensor> getSensorList(int type); 

    ... // You will need to add all the methods you use from SensorManager here 
} 

을 그리고 SensorManager에 대한 래퍼를 작성을 그 실제 SensorManager 객체의 메소드를 호출합니다.

class MySensorManagerWrapper implements MySensorManager { 
    SensorManager mSensorManager; 

    MySensorManagerWrapper(SensorManager sensorManager) { 
     super(); 
     mSensorManager = sensorManager; 
    } 

    List<Sensor> getSensorList(int type) { 
     return mSensorManager.getSensorList(type_; 
    } 

    ... // All the methods you have in your MySensorManager interface will need to be defined here - just call the mSensorManager object like in getSensorList() 
} 

그런 다음 이번에는 다른 MySensorManager를 작성하십시오.

class MyFakeSensorManager implements MySensorManager { 
    Socket mSocket; 

    MyFakeSensorManager() throws UnknownHostException, IOException { 
     super(); 
     // Connect to the desktop over a socket 
     mSocket = = new Socket("(IP address of your local machine - localhost won't work, that points to localhost of the emulator)", SOME_PORT_NUMBER); 
    } 

    List<Sensor> getSensorList(int type) { 
     // Use the socket you created earlier to communicate to a desktop app 
    } 

    ... // Again, add all the methods from MySensorManager 
} 

그리고 마지막으로, 당신의 첫 번째 줄 대체 :

: 새로운 라인으로

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

를 사용하면 센서 값이나 뭔가를 입력 할 경우 데스크톱 응용 프로그램에 소켓을 통해 nicates 당신이 만듭니다

MySensorManager mSensorManager; 
if(YOU_WANT_TO_EMULATE_THE_SENSOR_VALUES) { 
    mSensorManager = new MyFakeSensorManager(); 
else { 
    mSensorManager = new MySensorManagerWrapper((SensorManager)getSystemService(SENSOR_SERVICE)); 
} 

이제 이전에 사용하던 SensorManager 대신 해당 객체를 사용할 수 있습니다.

+1

안녕하세요. 이삭! 귀하의 답변에 감사드립니다. 그것은 내가 만들고자하는 것보다 더 많거나 적은 것이며, 나는 그것을 시험해보고 그것을 어떻게 알았는지 알려줄 것입니다. =) – Hugo

+0

안녕하세요, 솔루션을 구현 한 적이 있습니까? 최근에 시도해 보니 문제가 발생했습니다. 새 SensorEvent 객체를 만들어야하지만, SensorEvent 클래스의 마지막이므로 값을 설정할 수 없습니다. Reflection을 통해이를 설정함으로써 해결 방법을 시도했을 때 SensorEvent에 ClassNotFound 오류가 발생했습니다. corretly를 기억하면 ... – andreas

관련 문제