• Android 传感器应用


    一、传感器应用 android4.0以上

    就这种错误java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sensorget/com.sensorget.MainActivity}: java.lang.NullPointerException

    哭了,貌似android4.0以上 主线程 不能处理太多任务,系统会强制kill。 所以应采用子线程进行更新ui!!

    package com.sensorget;
    
    import java.util.List;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    @SuppressLint("HandlerLeak")
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            if (savedInstanceState == null) {
                getFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment()).commit();
            }
    
            new Thread(runnable).start();// 线程执行!
        }
    
        Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Bundle data = msg.getData();
                String val = data.getString("value");
    
                // 准备显示信息的UI组建
                TextView txt = (TextView) findViewById(R.id.textView1);
                txt.setText(val);
            }
        };
    
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                Message msg = new Message();
                Bundle data = new Bundle();
    
                data.putString("value", initView());
                msg.setData(data);
                handler.sendMessage(msg);
            }
        };
    
        private String initView() {
            // 从系统服务中获得传感器管理器
            SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    
            // 从传感器管理器中获得全部的传感器列表
            List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
            String str = "";
    
            // 显示有多少个传感器
            // txt.setText("经检测该手机有" + allSensors.size() + "个传感器,他们分别是:
    ");
            str += "经检测该手机有" + allSensors.size() + "个传感器,他们分别是:
    ";
    
            // 显示每个传感器的具体信息
            for (Sensor s : allSensors) {
    
                String tempString = "
    " + "  设备名称:" + s.getName() + "
    "
                        + "  设备版本:" + s.getVersion() + "
    " + "  供应商:"
                        + s.getVendor() + "
    ";
                System.out.println("传感器:" + s.getType());
                switch (s.getType()) {
                case Sensor.TYPE_ACCELEROMETER:
                    str += s.getType() + " 加速度传感器accelerometer" + tempString;
                    break;
                case Sensor.TYPE_AMBIENT_TEMPERATURE:
                    str += s.getType() + " 温度传感器temperature" + tempString;
                    break;
                case Sensor.TYPE_GRAVITY:
                    str += s.getType() + " 重力传感器gravity" + tempString;
                    break;
                case Sensor.TYPE_GYROSCOPE:
                    str += s.getType() + " 陀螺仪传感器gyroscope" + tempString;
                    break;
                case Sensor.TYPE_LIGHT:
                    str += s.getType() + " 环境光线传感器light" + tempString;
                    break;
                case Sensor.TYPE_LINEAR_ACCELERATION:
                    str += s.getType() + " 线性加速度传感器linear_accelerometer"
                            + tempString;
                    break;
                case Sensor.TYPE_MAGNETIC_FIELD:
                    str += s.getType() + " 电磁场传感器magnetic field" + tempString;
                    break;
                case Sensor.TYPE_PRESSURE:
                    str += s.getType() + " 压力传感器pressure" + tempString;
                    break;
                case Sensor.TYPE_PROXIMITY:
                    str += s.getType() + " 距离传感器proximity" + tempString;
                    break;
                case Sensor.TYPE_RELATIVE_HUMIDITY:
                    str += s.getType() + " 湿度传感器relative_humidity" + tempString;
                    break;
                case Sensor.TYPE_ROTATION_VECTOR:
                    str += s.getType() + " 旋转矢量传感器rotation_vector" + tempString;
                    break;
                default:
                    str += s.getType() + " 未知传感器" + tempString;
                    break;
                }
            }
            return str;
        }
    
        @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;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
        /**
         * A placeholder fragment containing a simple view.
         */
        public static class PlaceholderFragment extends Fragment {
    
            public PlaceholderFragment() {
            }
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container,
                        false);
                return rootView;
            }
        }
    
    }
  • 相关阅读:
    Java中的分代垃圾回收策略
    Java Web容器的启动与处理请求的过程
    利用LRUMap 设计缓存
    《淘宝技术这十年》
    Java中的堆内存、栈内存、静态存储区
    JAVA中的代理技术(静态代理和动态代理)
    java中的synchronized关键字
    代理模式
    状态模式
    SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
  • 原文地址:https://www.cnblogs.com/MicroHao/p/4086729.html
Copyright © 2020-2023  润新知