2013-11-14 3 views
0

Есть ли способ получить значения от датчика, в то время как основной thred приостановлен?Получить значения датчиков, если основная нить приостановлена ​​

ЦЕЛЬ: Мне нужно зарегистрировать датчик освещенности, основной поток должен ждать 10 секунд, а затем я должен получить среднее значение через эти 10 секунд.

ПРОБЛЕМА: Я должен ждать в главном потоке, так что если я сделать какое-то время или сон, датчик не получает никакого значения

ЧТО Я ПРОБОВАЛ: Я пытался зарегистрировать датчик в другом потоке или asynctask, но ничего не произошло, если я приостановил основной поток в течение 10 секунд (я пробовал со сном, с обработчиком, некоторое время и с соединением). Пользователь предложил мне использовать Handler и onPause/onResume. Мой фактический код - это, но я все еще ничего не получаю, пока главный нить ждет:

public class MyActivity 
{ 
    private Lux light; //Lux implements SensorEventListener 
    private SensorManager mSensorManager; 

    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listeners); 
     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
     light=new Lux(); 
     onPause(); 
    } 

    @Override 
    protected void onResume() 
    { 
     mSensorManager.unregisterListener(light, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)); 
     light.getAverage(); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() 
    { 
     super.onPause(); 
     mSensorManager.registerListener(light, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_FASTEST); 
     Handler h=new Handler(); 
     h.postDelayed(myTask, 10000); 
    } 

    private Runnable myTask = new Runnable() 
    { 
     public void run() 
     { 
      onResume(); 
     } 
    }; 
} 

Пожалуйста, помогите мне.

ответ

0

Я решил этот путь. это было проще, чем я думал.

SensorManager mSensorMgr = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); 

HandlerThread mHandlerThread = new HandlerThread("sensorThread"); 

mHandlerThread.start(); 

Handler handler = new Handler(mHandlerThread.getLooper()); 

mSensorMgr.registerListener(this, mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
        SensorManager.SENSOR_DELAY_FASTEST, handler); 
0

onPause/onResume не предназначены для звонков пользователем. Их нужно называть только вашей системой.

Методы EventListener вызываются системой в основном потоке, поэтому, если вы остановите ее любыми способами, они просто не будут вызваны.

в вашем onCreate, а не в отправляет runnable, который будет обрабатывать записанные данные.

Хотя лучше использовать начатое обслуживание для ваших нужд.

+0

Так что мне нужно запустить в oncreate, чтобы сделать то, что именно? Извините, но я начал использовать Android в прошлом месяце. –

 Смежные вопросы

  • Нет связанных вопросов^_^