編輯:關於Android編程
方向傳感器 Orientation (現在幾乎已經不用了,因為其實不存在真正的方向) 磁場傳感器 Magnetic Field 溫度傳感器 Temperature 光傳感器 Light 壓力傳感器 Pressure
用途:
方向傳感器用於感應手機設備的擺放狀態。比如手機頂部的朝向,手機目前的傾斜角度等:借助於方向傳感器,可以開發指南針、水平儀。(注:現在我們一般不用方向傳感器來做指南針)
方向傳感器返回的三個角度說明:
第一個:表示手機頂部朝向與正北方的夾角。(比如手機繞Z軸旋轉時,該角度發生變化) 第二個:表示手機頂部或底部翹起的角度(比如手機繞X軸傾斜時,該角度值變化-180~180,手機頂部抬起變負值) 第三個:表示表示手機左側或右側翹起的角度(當手機繞Y軸傾斜時,該角度值發生變化范圍-90~90,左側抬起變負值)這裡就不詳細介紹了,後面我們用指南針的實例一起來介紹磁場傳感器的使用吧。
功能:這裡利用幾個文本框來顯示不同的傳感器的值。
sensorAcitivity:
package com.example.myapplication.activitys;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import com.example.myapplication.R;
import com.example.myapplication.baseactivity.BaseActivity;
public class SensorActivity extends BaseActivity implements SensorEventListener{//2.必須實現接口
private TextView mTextviewOri;
private TextView mTextviewlight;
private TextView mTextviewcichang;
private TextView mTextviewtemp;
private TextView mTextviewpressure;
private SensorManager mSensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor);
mTextviewOri = (TextView) findViewById(R.id.textori);
mTextviewlight = (TextView) findViewById(R.id.textlight);
mTextviewcichang = (TextView) findViewById(R.id.textcichang);
mTextviewtemp = (TextView) findViewById(R.id.texttemper);
mTextviewpressure = (TextView) findViewById(R.id.textpressure);
//1.獲得傳感器管理服務
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
//3.為系統的方向傳感器注冊監聽器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);
//.為系統的磁場傳感器注冊監聽器
mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_GAME);
//.為系統的溫度傳感器注冊監聽器
mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE),SensorManager.SENSOR_DELAY_GAME);
//.為系統的光傳感器注冊監聽器
mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_GAME);
//.為系統的壓力傳感器注冊監聽器
mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),SensorManager.SENSOR_DELAY_GAME);
}
/**
* 下面兩個方法是實現接口不許實現的方法
* @param event
*/
@Override
public void onSensorChanged(SensorEvent event) {//4.獲得數據進行操作
float[] values = event.values;
int sensorType = event.sensor.getType();//獲取觸發event的傳感器類型
StringBuilder sb = null;
//判斷是哪個傳感器發生改變
switch (sensorType){
//方向傳感器
case Sensor.TYPE_ORIENTATION:
sb = new StringBuilder();
sb.append(繞z軸轉過的角度:);
sb.append(values[0]);
sb.append(
繞x軸轉過的角度:);
sb.append(values[1]);
sb.append(
繞y軸轉過的角度:);
sb.append(values[2]);
mTextviewOri.setText(sb.toString());
break;
//磁場傳感器
case Sensor.TYPE_MAGNETIC_FIELD:
sb = new StringBuilder();
sb.append(x方向上的角度:);
sb.append(values[0]);
sb.append(
y方向上的角度:);
sb.append(values[1]);
sb.append(
z方向上的角度:);
sb.append(values[2]);
mTextviewcichang.setText(sb.toString());
break;
//溫度傳感器
case Sensor.TYPE_AMBIENT_TEMPERATURE:
sb = new StringBuilder();
sb.append(當前溫度:);
sb.append(values[0]);
mTextviewtemp.setText(sb.toString());
break;
//光傳感器
case Sensor.TYPE_LIGHT:
sb = new StringBuilder();
sb.append(當前光強度:);
sb.append(values[0]);
mTextviewlight.setText(sb.toString());
break;
//壓力傳感器
case Sensor.TYPE_PRESSURE:
sb = new StringBuilder();
sb.append(當前壓力:);
sb.append(values[0]);
mTextviewpressure.setText(sb.toString());
break;
}
}
@Override //傳感器精度改變時回調的方法
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
protected void onPause() {
//程序暫停時取消注冊傳感器監聽器
mSensorManager.unregisterListener(this);
super.onPause();
}
@Override
protected void onStop() {
//程序停止時取消傳感器監聽器
mSensorManager.unregisterListener(this);
super.onStop();
}
}
布局:
效果:
說明:
實際上,上面的數據模擬時都是變化的,但手機其實是沒有動位置的,所以我還不知道是哪裡的問題呢,望知道的大神指教。^^
還有,可以看出,該程序不能獲取傳感器和壓力傳感器的值,這是因為我的手機並不支持溫度傳感器和壓力傳感器的讀取。
酷狗ktv怎麼用自己的伴奏?一、 音樂分類,找KTV伴 酷狗音樂的軟件設計者為愛唱歌用戶考慮周到,在“酷狗音樂2008軟件”的右
熟知:什麼是傳感器: 所謂傳感器能夠探測如光、熱、溫度、重力、方向 等等的功能!Android中提供傳感器有哪些:&nbs
當應用運行起來後就會開啟一條線程,線程中會運行一個任務棧,當Activity實例創建後就會放入任務棧中。Activity啟動模式的設置在AndroidManifest.x
今天終於有點時間,來寫了一下: 為RecyclerView實現下拉刷新和上拉加載更多。今天會在前面的兩篇文章的基礎上:RecyclerView系列之(1):為Recycl