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

赛义德·亚兹达尼(Saeid Yazdani)

我已经编写了一项在后台记录加速度计值的服务。想法是注册传感器侦听器并将值写入存储。我已经启用了StrictMode.enableDefaults()MainActivity应用程序(不在服务)的检查,如果在自己的线程在服务运行。但事实并非如此!我不知道问题出在哪里...我有AsyncTask一个我希望解决这个问题的类,但是显然没有(这是在服务内部,并且它的execute方法是从服务的方法中调用onCreate的)。

private class LogTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... voids) {

        mListener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {

                String formatted = String.valueOf(System.currentTimeMillis())
                        + "\t" + String.valueOf(sensorEvent.timestamp)
                        + "\t" + String.valueOf(sensorEvent.values[0])
                        + "\t" + String.valueOf(sensorEvent.values[1])
                        + "\t" + String.valueOf(sensorEvent.values[2])
                        + "\r\n";

                //if (mIsServiceStarted && mFileStream != null && mLogFile.exists()) {
                if (mFileStream != null && mLogFile.exists()) {

                    try {
                        mFileStream.write(formatted.getBytes());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        };

        mSensorManager.registerListener(
                mListener, mSensor, SensorManager.SENSOR_DELAY_FASTEST
        );

        return null;
    }
}

log cat中的StrictMode特别指出以下行使该策略无效:

mFileStream.write(formatted.getBytes());

StrictMode policy violation; ~duration=0 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=31 violation=1
            at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:1092)

有人可以告诉我出什么事了吗?如果需要,这是我的服务的完整代码:http : //pastebin.com/NRm376BL

赛义德·亚兹达尼(Saeid Yazdani)

我发现问题是,我应该创建一个HandlerThread和一个Handler并将处理程序传递给registerListener方法的重载如果不提供此参数,则监听器将由主线程处理,大多数情况下,这不是您要查找的内容。

对于示例实现,请检查以下代码:特别是用于处理其他线程(而不是主线程)上的传感器侦听器

http://pastebin.com/QuHd0LNU

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android传感器和线程

来自分类Dev

Android传感器和线程

来自分类Dev

获取Android中的传感器列表

来自分类Dev

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

来自分类Dev

TYPE_SIGNIFICANT_MOTION传感器在Android中的实现

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

ListView名称传感器Android中的错误

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Android如何设置传感器延迟?

来自分类Dev

Android传感器直立旋转

来自分类Dev

Android传感器直立旋转

来自分类Dev

如何注销多个传感器的android

来自分类Dev

Android上的冗余运动传感器?

来自分类Dev

Moto 360中的传感器列表

来自分类Dev

Webots与Pycharm中的马达/传感器

来自分类Dev

消除传感器测量中的峰值

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在Android中每0.5秒检查一次传感器数据

来自分类Dev

如何在Android Wearable中访问心率传感器?

来自分类Dev

除了这些之外,android中还有其他传感器吗?

来自分类Dev

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

来自分类Dev

仅从Xamarin Android中的GPS传感器检索位置信息

来自分类Dev

使用标签的传感器列表中的Android动态onClick按钮

来自分类Dev

如何在Android中绘制加速度传感器值的图表?

来自分类Dev

在Android中,当使用传感器收集数据时,我应该使用IntentService还是Service?

Related 相关文章

热门标签

归档