Android 感應器應用

來源:互聯網
上載者:User

標籤:des   android   style   blog   io   color   ar   os   java   

一、感應器應用 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 感應器應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.