الحصول على بيانات من أجهزة استشعار Android بدون مستمعين

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

سؤال

لدي الرمز التالي:

public class readSensorsData extends Activity implements SensorListener {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sm = (SensorManager) getSystemService(SENSOR_SERVICE);     

}
@Override   
public void onSensorChanged(int sensor, float[] values) {
    synchronized (this) {
        if (sensor == SensorManager.SENSOR_ORIENTATION) {

        //get orientation       

        }
        if (sensor == SensorManager.SENSOR_ACCELEROMETER) {

         //get acceleration
             }                

        } 
        if (sensor == SensorManager.SENSOR_MAGNETIC_FIELD) {

         //get magnetic fiels
             }     
     Bundle bundle = new Bundle(); //results from activity
     bundle.putFloatArray("acceleration", array);

     Intent mIntent = new Intent();
     mIntent.putExtras(bundle);
     setResult(RESULT_OK, mIntent);
     finish();
        }

  public void onAccuracyChanged(int sensor, int accuracy) {

  }

@Override
protected void onResume() {
    super.onResume();
    sm.registerListener(this, 
            SensorManager.SENSOR_ORIENTATION |
      SensorManager.SENSOR_ACCELEROMETER |
      SensorManager.SENSOR_MAGNETIC_FIELD,
            SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onStop() {
    sm.unregisterListener(this);
    super.onStop();


  }
}

الكود يعمل ولكن هنا يذهب مشكلتي: عندما أسميها من النشاط الرئيسي بهذه الطريقة:

     Intent i = new Intent(this, readSensorsData.class);
  startActivityForResult(i, 1); //1 is for sensors     
     for(int j=0;j<10;j++)
     {
                 //do sth else here!!!!
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {e.printStackTrace();}
      //here code for showing result from sensor activity

     } 

ثم أستطيع أن أرى 10 مرات نتيجة "القيام بـ STH آخر !!!" وعندما تنتهي الحلقة ، يمكنني أن أرى ثم ناتجة عن النشاط. لذلك ينتظر نشاط المستشعر لسبب ما ، وبعد ذلك عندما لا يكون النشاط الرئيسي لا يفعله ، تقوم المستشعرات بعملها.

بالطبع لقد قمت بتنفيذ جيد: onActivityResult (int requestcode ، int resultcode ، نية النية)

أريد قراءة بيانات Sensord مباشرة ، وليس استخدام المستمعين ، هل هذا ممكن؟

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

المحلول

أولاً، أبداً مكالمة Thread.sleep() في موضوع التطبيق الرئيسي.

ثانيا، startActivityForResult() غير متزامن. لن يبدأ النشاط الآخر متى startActivityForResult() عائدات.

ثالثًا ، أحداث المستشعر غير متزامنة.

لذلك ينتظر نشاط المستشعر لسبب ما

لا يمكن أن تبدأ حتى تخرج من موضوع التطبيق الرئيسي ، الذي يتم ربطه من قبل الخاص بك Thread.sleep() المكالمات.

ثم عندما لا يفعل النشاط الرئيسي شيئًا ، فإن المستشعرات تقوم بعملهم.

على وجه التحديد.

أريد قراءة بيانات Sensord مباشرة ، وليس استخدام المستمعين ، هل هذا ممكن؟

لا. فقط استخدم المستمعين بشكل صحيح. فيما يلي ثلاثة مشاريع عينة إظهار استخدام مستمعي المستشعر.

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