首页 > 代码库 > Android 传感器应用

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() + "个传感器,他们分别是:\n");        str += "经检测该手机有" + allSensors.size() + "个传感器,他们分别是:\n";        // 显示每个传感器的具体信息        for (Sensor s : allSensors) {            String tempString = "\n" + "  设备名称:" + s.getName() + "\n"                    + "  设备版本:" + s.getVersion() + "\n" + "  供应商:"                    + s.getVendor() + "\n";            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;        }    }}

 

Android 传感器应用