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)