標籤: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 感應器應用