كيفية بناء جهاز محاكاة الاستشعار عن الروبوت؟

StackOverflow https://stackoverflow.com/questions/1059839

  •  21-08-2019
  •  | 
  •  

سؤال

وأنا بناء تطبيق لمنصة أندرويد، وأود أن استخدام التسارع. الآن، لقد وجدت تطبيق لطيف جدا لمحاكاة أجهزة الاستشعار ( OpenIntents "SensorSimulator ) ولكن، على ما أريد القيام به، وأود أن إنشاء بلدي تطبيق الاستشعار محاكاة.

معلومات

وأنا لا يمكن العثور على كيفية القيام بذلك (أنا لا أعرف إذا كان التفكيك جرة من محاكي صحيحة)، وكما قلت، وأود أن بناء نسخة أصغر حجما وأكثر بساطة من جهاز محاكاة الاستشعار، وأكثر مناسبة للالنوايا بلدي.

هل تعرف أين يمكن أن أبدأ؟ أين يمكنني معرفة ما هي قطعة من التعليمات البرمجية التي أنا بحاجة إلى بناء؟

وأساسا، كل ما عندي من يسأل فقط لبعض الاتجاه.

هل كانت مفيدة؟

المحلول

حسنا، يبدو ما كنت تريد أن تجعل هو تطبيق من شأنها أن تحاكي أجهزة الاستشعار على جهاز الروبوت للتطبيق الخاص بك أثناء اختبار على المضاهاة.
ربما في التطبيق الخاص بك، لديك مثل هذا الخط:

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);

ومع خط جديد:

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

والآن يمكنك فقط استخدام هذا الكائن بدلا من SensorManager استخدمته من قبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top