English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يروي هذا المقال مثالاً على استخدام استشعار الجاذبية في تطوير Android. يُشارك معكم للاستفادة، وهو كما يلي:
استشعار الجاذبية يعتمد بشكل رئيسي على مستشعر التسارع في الهاتف (accelerometer) لتحقيقها
في تطوير Android هناك ثمانية أنواع من المستشعرات، ولكن ليس كل نموذج هاتف يدعم هذه المستشعرات. لأن العديد من الوظائف ليست مهمة للعديد من المستخدمين، لذا قد يخفي المطورون بعض الوظائف. يجب القيام بتطوير بناءً على الواقع الفعلي للنموذج الحقيقي، وسيتم مناقشة تنفيذ مستشعر التسارع بشكل رئيسي أدناه، واسم المستشعر هو كما يلي:
مستشعر التسارع (accelerometer)
مستشعر الجيروسكوب (gyroscope)
مستشعر الإضاءة البيئية (light)
مستشعر الحقل المغناطيسي (magnetic field)
مستشعر الاتجاه (orientation)
مستشعر الضغط (pressure)
مستشعر التباعد (proximity)
مستشعر درجة الحرارة (temperature)
1. مدير المستشعرات SensorMannager
جميع المستشعرات في الهاتف يجب الوصول إليها من خلال SensorMannager، يمكن الحصول على مدير المستشعرات الحالي للهاتف عن طريق استدعاء getSystemService (SENSOR_SERVICE)方法.
2. تنفيذ واجهة SensorEventListener
نحن بحاجة إلى تنفيذ واجهة SensorEventListener واجهة علىSensorChanged(SensorEventevent)للتقاطع حالة مستشعر الهاتف، للحصول على مكونات الجاذبية في اتجاهات المحور XYZ الثلاثة للمحور، مع هذه البيانات الثلاثة نحن قد تعلمنا مبادئ استشعار الجاذبية.
public void onSensorChanged(SensorEvent e) { float x = e.values[SensorManager.DATA_X]; float y = e.values[SensorManager.DATA_Y]; float z = e.values[SensorManager.DATA_Z]; };
كما هو موضح في الكود أعلاه: نطاق القيم لـ x، y، z في اتجاهات الثلاثة هو بين -10 و10. الآن، دعونا نوضح معنى مكونات الجاذبية لمحور X، محور Y، محور Z (يحتاج الانتباه إلى نقطة التحول: الزيادة نحو السماء هي إيجابية، نحو الأرض هي سالبة، مما يعني أن نظام الإحداثيات يتعارض مع وقت البرمجة):
(1) عندما تكون شاشة الهاتف متجهة إلى اليسار، فإن محور X يتجه نحو السماء، يتم وضعها عمودياً، في هذه الحالة لا توجد مكونات جاذبية في محور Y ومحور Z، لأن محور X يتجه نحو السماء، لذا تكون مكونات الجاذبية أكبر. في هذه الحالة، تكون قيم مكونات الجاذبية في محور X، محور Y ومحور Z (10،0،0);
(2) عندما تكون شاشة الهاتف متجهة إلى اليمين، فإن محور X يتجه نحو الأرض، يتم وضعها عمودياً، في هذه الحالة لا توجد مكونات جاذبية في محور Y ومحور Z، لأن محور X يتجه نحو الأرض، لذا تكون مكونات الجاذبية أقل. في هذه الحالة، تكون قيم مكونات الجاذبية في محور X، محور Y ومحور Z (-10،0،0);
(3) عندما تكون شاشة الهاتف متجهة للأعلى، فإن محور Y يتجه نحو السماء، يتم وضعها على مستوى، في هذه الحالة لا توجد مكونات جاذبية في محور X ومحور Z، لأن محور Y يتجه نحو السماء، لذا تكون مكونات الجاذبية أكبر. في هذه الحالة، تكون قيم مكونات الجاذبية في محور X، محور Y ومحور Z (0،10،0);
(4) عندما تكون شاشة الهاتف متجهة للأعلى، فإن محور Y يتجه نحو الأرض، يتم وضعها على مستوى، في هذه الحالة لا توجد مكونات جاذبية في محور X ومحور Z، لأن محور Y يتجه نحو الأرض، لذا تكون مكونات الجاذبية أقل. في هذه الحالة، تكون قيم مكونات الجاذبية في محور X، محور Y ومحور Z (0،-10،0);
(5) عندما يكون شاشة الهاتف متجهة للأعلى، فإن محور Z يتجه نحو السماء، يتم وضعها على مستوى، في هذه الحالة لا توجد مكونات جاذبية في محور X ومحور Y، لأن محور Z يتجه نحو السماء، لذا تكون مكونات الجاذبية أكبر. في هذه الحالة، تكون قيم مكونات الجاذبية في محور X، محور Y ومحور Z (0،0،10);
(6) عندما يكون شاشة الهاتف متجهة للأعلى، فإن محور Z يتجه نحو الأرض، يتم وضعها على مستوى، في هذه الحالة لا توجد مكونات جاذبية في محور X ومحور Y، لأن محور Z يتجه نحو الأرض، لذا تكون مكونات الجاذبية أقل. في هذه الحالة، تكون قيم مكونات الجاذبية في محور X، محور Y ومحور Z (0،0،-10).
3. التسجيل كمستمع SensorEventListener
استخدام SensorMannager للحصول على Object Sensor للحركة الجاذبية باستخدام طريقة getDefaultSensor(Sensor.TYPE_ACCELEROMETER). لأنني أتحدث عن Sensor الحركة الجاذبية، يتم استخدام Sensor.TYPE_ACCELEROMETER كمعامل، إذا كنت بحاجة إلى الحصول على مقياسات أخرى، فيجب تقديم الاسم المناسب. يمكنك التسجيل باستخدام طريقة registerListener() من SensorMannager، الثالثة هي دقة التشخيص، يمكنك اختيار دقة التشخيص بناءً على احتياجاتك، يُنصح في تطوير الألعاب باستخدام SensorManagerSENSOR_DELAY_ GAME.
4. طريقة حساب السرعة البسيطة باستخدام الاستشعار بالجاذبية
كل مرة يتم رجوع الهاتف، يتم حساب مكونات الجاذبية في المحور X، المحور Y، والمحور Z، ويتم تسجيلها. ثم يمكن مقارنة مكونات الجاذبية في كل مرة برجوع المكونات السابقة، واستخدام الفرق والوقت لتحديد سرعة الحركة.
يحتوي جهاز الاستشعار بالجاذبية على ثلاثة أجزاء: مقياس الاستشعار، معالج، ومراقب. يتحقق المقياس من حالة الذاكرة، ويحسب قيمة تسارع الجاذبية للذاكرة؛ أما المعالج فيتحقق مما إذا كانت قيمة التسارع تتجاوز النطاق الآمن؛ ويقوم المراقب بتحكم في إغلاق أو فتح رأس الماوس في منطقة الركن الآمن. وعندما يكتشف المقياس، ويقوم المعالج بتحديد أن تسارع الجاذبية الحالي يتجاوز القيمة الآمنة، يقوم المراقب بوقف عمل رأس الماوس عن القراءة والكتابة، والعودة بسرعة إلى منطقة الركن المخصص، وإغلاقها. يتم تنفيذ هذه العمليات في غضون 200 ملي ثانية. وعندما يعود تسارع الجاذبية إلى النطاق الطبيعي، يعود المنتج إلى العمل.
كود إطار العمل المتعدد الوسائط في الدليل التالي: external/opencore/. هذا الدليل هو دليل جذر إطار العمل المتعدد الوسائط لـ Android، ويشمل الدلائل الفرعية التالية:
* android: مكتبة سطحية تعتمد على SDK لـ PVPlayer وPVAuthor وتقوم بإنشاء Player وAuthor لـ Android
* baselibs: تحتوي على مكتبات الأساسية مثل بنيات البيانات والسلامة في الاستخدام المتعدد
* codecs_v2: مكتبة تحتوي على الكثير من المحتويات، وتحتوي على تنفيذ الترميز والتفسير، بالإضافة إلى تنفيذ OpenMAX
* engines: تحتوي على تنفيذ محركات PVPlayer وPVAuthor
*extern_libs_v2: تحتوي على ملفات الرأس الخاصة بـ OpenMAX من khronos
*fileformats: تحليل (parser) الفورمات المختلفة للملفات
* nodes: أنواع النود المختلفة للترميز والتفسير والتحليل
* oscl: مكتبة التوافق مع نظام التشغيل
* pvmi: واجهة التشغيل والمخرجات الم抽象ة
* protocols: هذه البروتوكولات تتعلق بمحتوى RTSP، RTP، HTTP وما إلى ذلك من البروتوكولات المتعلقة بالشبكة
* pvcommon:ملف Android.mk للإصدار pvcommon، لا يحتوي على ملفات المصدر
*pvplayer:ملف Android.mk للإصدار pvplayer، لا يحتوي على ملفات المصدر
* pvauthor:ملف Android.mk للإصدار pvauthor، لا يحتوي على ملفات المصدر
* tools_v2:أدوات التجميع وأجزاء القابلة للتسجيل
هذا جزء من الكود الاختباري:
private SensorManager sensorMgr; Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //حفظ إحداثيات x y z الماضية float bx = 0; float by = 0; float bz = 0; long btime = 0;//وقت هذه المرة sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); SensorEventListener lsn = new SensorEventListener() { public void onSensorChanged(SensorEvent e) { float x = e.values[SensorManager.DATA_X]; float y = e.values[SensorManager.DATA_Y]; float z = e.values[SensorManager.DATA_Z]; //بعد حساب القيم X Y Z، يمكنك حساب سرعة الاهتزاز بناءً على هذه القيم //السرعة = المسافة/الوقت //سرعة المحور x float speadX = (x - bx) / (System.currentTimeMillis() - btime); //سرعة المحور y float speadY = (y - by) / (System.currentTimeMillis() - btime); //سرعة المحور z float speadZ = (z - bz) / (System.currentTimeMillis() - btime); //بإمكانك حساب السرعة البسيطة بهذا المعدل، وإذا كنت تريد حساب الإنتاجية أيضًا، في علم الحركة، الإنتاجية a مرتبطة بالسرعة، // الحركات لها علاقة: Vt=V0+at، S=V0*t+1/2at^2، S=(Vt^2-V0^2)/(2a)، يمكن أيضًا حوسب a بناءً على هذه المعلومات. bx = x; by = y; bz = z; btime = System.currentTimeMillis(); }; public void onAccuracyChanged(Sensor s, int accuracy) { }; }; // التسجيل في listener، الثالث هو دقة التحقق sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
بالنسبة للقراء المهتمين بمزيد من المعلومات حول Android، يمكنهم مراجعة مواضيع هذا الموقع: 'دليل البدء والتحسين في تطوير Android'، 'ملخص مهارات عرض Android'، 'ملخص مهارات التشغيل في activity Android'، 'ملخص مهارات العمل مع قاعدة بيانات SQLite في Android'، 'ملخص مهارات العمل مع بيانات JSON في Android'، 'ملخص مهارات العمل مع قاعدة بيانات Android'، 'ملخص مهارات العمل مع ملفات Android'، 'ملخص مهارات التشغيل لـ SD Card في Android'، 'ملخص مهارات العمل مع موارد Android'، و'ملخص استخدام وحدات التحكم في Android'.
نتمنى أن يساعدك ما ذكرته في هذا المقال في تصميم برامج Android.
بيان: محتوى هذا المقال تم جمعه من الإنترنت، يحق لصاحب الحقوق أن يكون مالكًا له، تم جمع المحتوى من قبل المستخدمين على الإنترنت الذين قاموا بتحميله بشكل مستقل، ويتمتع هذا الموقع بلا ملكية، ويتمتع بلا تحرير يدوي، ولا يتحمل أي مسؤولية قانونية متعلقة بذلك. إذا وجدت محتوى يشتبه في انتهاك حقوق النسخ، فنرجو منك إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (يرجى استبدال #بـ @ عند إرسال البريد الإلكتروني) لإبلاغنا، وتقديم الدليل على ذلك، وسيتم حذف المحتوى المزعوم بعد التحقق من صحة التهمة.