Android传感器和线程

作为

我想创建一个应用程序,当主线程仍在工作时,我的传感器在另一个线程中获取值。我尝试了另一个线程,但是没有用。我尝试使用服务和IntentService,但是传感器在主线程之后启动。我当前的代码是这个。

MyService.java

public class MyService extends IntentService implements SensorEventListener 
{
    public MyService()
    {
        super("MyService");
    }

    Sensor mLight;
    SensorManager mSensorManager;
    float max;
    float currentLux;
    float currentProx;

    @Override
    public IBinder onBind(Intent intent) 
    {
        Log.d("Service", "On bind");
        return null;
    }

    @Override
    public void onCreate() 
    {
        Log.d("Service", "On create");
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) 
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) 
    {
        if( event.sensor.getType() == Sensor.TYPE_LIGHT)
        {
            currentLux=(int) event.values[0];
            float perc=(float) ((currentLux*100)/max);
            Log.d("Light", String.valueOf(perc));
        }   
        else if(event.sensor.getType() == Sensor.TYPE_PROXIMITY)
        {
            currentProx=(int) event.values[0];
            Log.d("Proximity", String.valueOf(currentProx));
        }
    }

    @Override
    public void onDestroy() 
    {
        Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
        Log.d("Service", "On stop");
        mSensorManager.unregisterListener(this);
    }

    @Override
    public void onStart(Intent intent, int startid) 
    {
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        Log.d("Service", "On start");
    }

    @Override//here u should register sensor and write onStartCommand not onStart
    public int onStartCommand(Intent intent, int flags, int startId) 
    {
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        mSensorManager.registerListener(this, mSensorManager
                .getDefaultSensor(Sensor.TYPE_LIGHT),
                SensorManager.SENSOR_DELAY_FASTEST);
        mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        mSensorManager.registerListener(this, mSensorManager
                .getDefaultSensor(Sensor.TYPE_PROXIMITY),
                SensorManager.SENSOR_DELAY_FASTEST);
        max=mLight.getMaximumRange();
        Log.d("MAX=", String.valueOf(max));
        return Service.START_STICKY;
    }

    @Override
    protected void onHandleIntent(Intent intent) 
    {
    }

}

侦听器

public class Listeners extends Activity implements OnClickListener 
{
     Button button0;
     Intent listenersIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listeners);
        lista= new ArrayList<Float>();
        button0 = (Button) findViewById(R.id.button0);
        button0.setOnClickListener(this);
        listenersIntent = new Intent(this, MyService.class);
        startService(listenersIntent);
        for (int i=0; i<999; i++)
            Log.d("Main", String.valueOf(i));
    }

    @Override
    public void onClick(View arg0) 
    {
        stopService(listenersIntent);
    }
}

我的问题是,在我希望它们一起运行时,在获得任何接近度/光照值之前,我总是得到1-999。你能帮我吗?

njzk2

您可以从onCreate方法中启动服务。该方法作为服务初始化在主线程上运行。这意味着该服务无法在您的onCreate运行时同时运行其初始化(更不用说非常快速地记录0-998了-从您的日志起80毫秒)。

此外,您正在注册侦听器。即使在您的服务启动后,这些调用也会被调用。

您不能像这样同步这两个动作。(并且没有足够的详细信息说明为什么根本需要任何同步以将您指向正确的方向)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android传感器和线程

来自分类Dev

Android传感器registerListener在单独的线程中

来自分类Dev

Android传感器的偏航,俯仰和横滚

来自分类Dev

Android如何设置传感器延迟?

来自分类Dev

Android传感器直立旋转

来自分类Dev

Android传感器直立旋转

来自分类Dev

获取Android中的传感器列表

来自分类Dev

如何注销多个传感器的android

来自分类Dev

Android上的冗余运动传感器?

来自分类Dev

接近传感器影响播放音频的线程

来自分类Dev

Android-如何根据传感器名称获取传感器详细信息?

来自分类Dev

Android-获取接近传感器的最小值和最大值

来自分类Dev

蓝牙LE Cadence和速度传感器未在Android上发送通知

来自分类Dev

在android camera2API中控制传感器ISO和曝光时间

来自分类Dev

使用android cmake添加传感器链接器

来自分类Dev

Android传感器管理器-反应本机错误

来自分类Dev

阵列和单元阵列的传感器时间分布

来自分类Dev

Raspberry Pi和Arduino读取串行传感器数据

来自分类Dev

SAP HANA和Hadoop / HDFS传输传感器数据

来自分类Dev

使用 BBG 和 python 连接高温传感器?

来自分类Dev

谷歌智能家居定制设备和传感器

来自分类Dev

为什么在Android中缺少传感器类型3?

来自分类Dev

使用传感器数据的Android智能电源管理

来自分类Dev

TYPE_SIGNIFICANT_MOTION传感器在Android中的实现

来自分类Dev

适用于Android的空中鼠标,哪个传感器?

来自分类Dev

用于模拟Android传感器的openintent的替代方法

来自分类Dev

Android传感器无法在服务中运行

来自分类Dev

如何在Android中检测双击接近传感器?

来自分类Dev

Android接近传感器问题仅在Samsung设备中

Related 相关文章

热门标签

归档