2009-06-29 15 views
10

Android platformu için bir uygulama yapıyorum ve ivmeölçer kullanmak istiyorum. Şimdi, sensör simülasyonu için çok güzel bir uygulama buldum (OpenIntents' SensorSimulator), ama yapmak istediklerim için kendi sensör simülatörü uygulamamı oluşturmak istiyorum.Android için bir Sensör Simülatörü Nasıl Yapılır?

Ben, dediğim gibi, ben bir sensör simülatörü daha küçük ve daha basit bir sürümünü kurmak istiyorum, bu nasıl yapılacağı hakkında bilgiler buldum (demontaj Simülatörü kavanoz doğru olup olmadığını bilmiyorum) ve henüz niyetlerim için daha uygun.

Nereden başlayabilirim biliyor musunuz? İnşa etmem gereken kod parçaları neler görebilirim?

Temel olarak, sadece bazı yön soruyorum.

cevap

8

Yapmak istediğiniz şey, emülatörde test ederken uygulamanız için bir Android cihazındaki sensörleri taklit edecek bir uygulama.

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

Neden yöntemleri Eğer SensorManager kullanmak olan bir arayüze oluşturmaz:
Muhtemelen uygulamanızda, böyle bir çizgi var

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

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

Sonra SensorManager için bir sarıcı oluşturmak olduğunu sadece gerçek SensorManager nesne üzerinde bu yöntemleri çağırır: ardından

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() 
} 

Ve başka MySensorManager oluşturmak bu kez commu o

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 
} 

Ve son olarak, ilk satırı değiştirin:

: Yeni bir satıra ile

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

Eğer sensör değerlerini falan girmek olan bir masaüstü uygulamasına bir soket üzerinden nicates oluşturacağınız

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

Artık, daha önce kullandığınız SensorManager yerine bu nesneyi kullanabilirsiniz.

+1

Merhaba Isaac !! Cevabınız için teşekkürler. Bu, inşa etmek istediğim şey, az ya da çok, bunu deneyeceğim ve hepinizin nasıl ortaya çıktığını anlatayım. =) – Hugo

+0

Merhaba, çözümü hiç uyguladınız mı? Son zamanlarda denedim ve soruna girdim, yeni SensorEvent Nesneleri oluşturmam gerekiyordu, ancak SensorEvent sınıfında son haliyle değerleri ayarlayamıyorum. Bunu yansıma aracılığıyla ayarlayarak bu sorunu çözdüğümde, SensorEvent üzerinde ClassNotFound hatalarım var, – andreas