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

潘克什

我正在为Android移动设备开发可扩展的传感和数据处理框架。它将启用可通过Android移动设备访问的各种数据信号(例如,温度,电池,压力,wifi信号强度等)。

为了测试传感器,我将编写的android代码部署在我的Android设备上。在这里,限制来了-我的android设备具有一组有限的传感器(例如,它没有温度传感器)因此,我无法测试所有类型的传感器(例如温度,压力,等等。)。

在Internet上,我已经检查了SensorSimulator项目(),但是它不适用于我。我收到以下错误。

05-03 01:40:40.766: E/AndroidRuntime(10139): FATAL EXCEPTION: main
05-03 01:40:40.766: E/AndroidRuntime(10139): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helloworldsensorsimulator/com.example.helloworldsensorsimulator.MainActivity}: android.os.NetworkOnMainThreadException
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2146)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.os.Looper.loop(Looper.java:177)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.ActivityThread.main(ActivityThread.java:4947)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.lang.reflect.Method.invokeNative(Native Method)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.lang.reflect.Method.invoke(Method.java:511)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at dalvik.system.NativeStart.main(Native Method)
05-03 01:40:40.766: E/AndroidRuntime(10139): Caused by: android.os.NetworkOnMainThreadException
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at libcore.io.IoBridge.connect(IoBridge.java:112)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.net.Socket.startupSocket(Socket.java:566)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.net.Socket.tryAllAddresses(Socket.java:127)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.net.Socket.<init>(Socket.java:177)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at java.net.Socket.<init>(Socket.java:149)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at org.openintents.sensorsimulator.hardware.SensorSimulatorClient.connect(SensorSimulatorClient.java:116)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at org.openintents.sensorsimulator.hardware.SensorManagerSimulator.connectSimulator(SensorManagerSimulator.java:220)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at com.example.helloworldsensorsimulator.MainActivity.onCreate(MainActivity.java:37)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.Activity.performCreate(Activity.java:5207)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
05-03 01:40:40.766: E/AndroidRuntime(10139):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2085)
05-03 01:40:40.766: E/AndroidRuntime(10139):    ... 11 more

我已经在网站上编写了以下代码,建议通过Java Project连接SensorSimulator。AndroidManifest文件包含

<uses-permission android:name="android.permission.INTERNET"/>


import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

public class MainActivity extends Activity {

    private SensorManagerSimulator mSensorManager;

    private SensorEventListener mEventListenerAccelerometer;
    private SensorEventListener mEventListenerGravity;
    private SensorEventListener mEventListenerLinearAcceleration;
    private SensorEventListener mEventListenerLight;
    private SensorEventListener mEventListenerTemperature;
    private SensorEventListener mEventListenerOrientation;
    private SensorEventListener mEventListenerMagneticField;
    private SensorEventListener mEventListenerPressure;
    private SensorEventListener mEventListenerRotationVector;
    private SensorEventListener mEventListenerBarcode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSensorManager = SensorManagerSimulator.getSystemService(this,
                SENSOR_SERVICE);

        mSensorManager.connectSimulator();


        initListeners();
    }

    private void initListeners() {
        mEventListenerAccelerometer = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("Accelerometer: " + values[0]
                        + ", " + values[1] + ", " + values[2]);
                /*mTextViewAccelerometer.setText("Accelerometer: " + values[0]
                        + ", " + values[1] + ", " + values[2]);*/
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerLinearAcceleration = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("Linear Acceleration: "
                        + values[0] + ", " + values[1] + ", " + values[2]);
                /*mTextViewLinearAcceleration.setText("Linear Acceleration: "
                        + values[0] + ", " + values[1] + ", " + values[2]);*/
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerGravity = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("Gravity: " + values[0] + ", "
                        + values[1] + ", " + values[2]);
                /*mTextViewGravity.setText("Gravity: " + values[0] + ", "
                        + values[1] + ", " + values[2]);*/
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerMagneticField = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;

                System.out.println("Compass: " + values[0] + ", "
                        + values[1] + ", " + values[2]);
                /*mTextViewMagneticField.setText("Compass: " + values[0] + ", "
                        + values[1] + ", " + values[2]);
*/          }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerOrientation = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("Orientation: " + values[0] + ", "
                        + values[1] + ", " + values[2]);
                /*mTextViewOrientation.setText("Orientation: " + values[0] + ", "
                        + values[1] + ", " + values[2]);*/
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerTemperature = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("Temperature: " + values[0]);
                //mTextViewTemperature.setText("Temperature: " + values[0]);
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerLight = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("Light: " + values[0]);
                //mTextViewLight.setText("Light: " + values[0]);
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerPressure = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("Pressure: " + values[0]);
                //mTextViewPressure.setText("Pressure: " + values[0]);
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        mEventListenerRotationVector = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                System.out.println("RotationVector: " + values[0]
                        + ", " + values[1] + ", " + values[2]);
            /*  mTextViewRotationVector.setText("RotationVector: " + values[0]
                        + ", " + values[1] + ", " + values[2]);*/
            }

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

        mEventListenerBarcode = new SensorEventListener() {

            @Override
            public void onSensorChanged(SensorEvent event) {
                System.out.println("Barcode: " + event.barcode);
                //mTextViewBarcode.setText("Barcode: " + event.barcode);
            }

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

    @Override
    protected void onResume() {
        super.onResume();
    /*  mSensorManager.registerListener(mEventListenerAccelerometer,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(mEventListenerLinearAcceleration,
                mSensorManager
                        .getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),
                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(mEventListenerGravity,
                mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),
                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(mEventListenerMagneticField,
                mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(mEventListenerOrientation,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
                SensorManager.SENSOR_DELAY_FASTEST);*/
        mSensorManager.registerListener(mEventListenerTemperature,
                mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE),
                SensorManager.SENSOR_DELAY_FASTEST);
        /*mSensorManager.registerListener(mEventListenerLight,
                mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(mEventListenerPressure,
                mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),
                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(mEventListenerBarcode,
                mSensorManager.getDefaultSensor(Sensor.TYPE_BARCODE_READER),
                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(mEventListenerRotationVector,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR),
                SensorManager.SENSOR_DELAY_FASTEST);*/
    }

    @Override
    protected void onStop() {
        /*mSensorManager.unregisterListener(mEventListenerAccelerometer);
        mSensorManager.unregisterListener(mEventListenerLinearAcceleration);
        mSensorManager.unregisterListener(mEventListenerGravity);
        mSensorManager.unregisterListener(mEventListenerMagneticField);
        mSensorManager.unregisterListener(mEventListenerOrientation);*/
        mSensorManager.unregisterListener(mEventListenerTemperature);
        /*mSensorManager.unregisterListener(mEventListenerLight);
        mSensorManager.unregisterListener(mEventListenerPressure);
        mSensorManager.unregisterListener(mEventListenerRotationVector);
        mSensorManager.unregisterListener(mEventListenerBarcode);*/
        super.onStop();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
直流电

调用SensorManager.connectSimulator()构成了网络操作,如堆栈跟踪所示。因此,您试图在应用程序的主线程上执行网络操作。Android默认情况下不允许这样做,因此您有两个选择。

  1. 使用另一个线程或异步任务AsyncTask语法和用法约定可能会有些混乱,因此这里有一个示例:AsyncTask Android示例
  2. 关闭严格模式 (不推荐)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

用于记录传感器数据的 Android 按钮

来自分类Dev

传感器模拟器的NetworkOnMainThreadException

来自分类Dev

如何在Android Wear模拟器上模拟来自心率传感器的数据?

来自分类Dev

用于传感器数据连接的 DBus

来自分类Dev

Android如何设置传感器延迟?

来自分类Dev

Android传感器和线程

来自分类Dev

Android传感器直立旋转

来自分类Dev

Android传感器和线程

来自分类Dev

Android传感器直立旋转

来自分类Dev

获取Android中的传感器列表

来自分类Dev

如何注销多个传感器的android

来自分类Dev

Android上的冗余运动传感器?

来自分类Dev

蓝牙低功耗传感器模拟器

来自分类Dev

蓝牙低功耗传感器模拟器

来自分类Dev

机器人传感器事件模拟

来自分类Dev

机器人传感器事件模拟

来自分类Dev

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

来自分类Dev

用于增强现实时传感器的x值错误

来自分类Dev

DB设计用于传感器数据(大量数据)

来自分类Dev

适用于 Ubuntu 的传感器诊断工具

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

TYPE_SIGNIFICANT_MOTION传感器在Android中的实现

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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