环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產(chǎn)品分類(lèi)

當(dāng)前位置: 首頁(yè) > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 力傳感器

類(lèi)型分類(lèi):
科普知識(shí)
數(shù)據(jù)分類(lèi):
力傳感器

安卓傳感器 重力:Android – 小功能 – 傳感器之重力傳感器

發(fā)布日期:2022-10-09 點(diǎn)擊率:30


安卓傳感器 重力:Android - 小功能 - 傳感器之重力傳感器  第1張

安卓傳感器 重力:Android - 小功能 - 傳感器之重力傳感器

陀螺儀傳感器叫做Gyro-sensor,陀螺儀測(cè)量圍繞設(shè)備的x,y和z軸的rad / s旋轉(zhuǎn)速率,返回x、y、z三軸的角速度數(shù)據(jù)。
角速度的單位是radians/second。
傳感器的坐標(biāo)系與用于加速度傳感器的坐標(biāo)系相同。逆時(shí)針旋轉(zhuǎn)為正。也就是說(shuō),如果觀察者從x,y或z軸上某個(gè)正位置看向位于原點(diǎn)上的設(shè)備,則該觀察者將報(bào)告正旋轉(zhuǎn),如果該設(shè)備看起來(lái)是逆時(shí)針旋轉(zhuǎn)的話(huà)。這是正向旋轉(zhuǎn)的標(biāo)準(zhǔn)數(shù)學(xué)定義,與方向傳感器使用的側(cè)傾定義不同。
通常,陀螺儀的輸出會(huì)隨時(shí)間積分,以計(jì)算描述角度隨時(shí)間步長(zhǎng)變化的旋轉(zhuǎn)。標(biāo)準(zhǔn)陀螺.安卓傳感器 重力:Android - 小功能 - 傳感器之重力傳感器  第2張

安卓傳感器 重力:Android開(kāi)發(fā)中的重力傳感器用法實(shí)例詳解

public class ScreenSwitchUtils {
private static final String TAG=ScreenSwitchUtils.class.getSimpleName();
private volatile static ScreenSwitchUtils mInstance;
private Activity mActivity;
// 是否是豎屏
private boolean isPortrait=true;
private SensorManager sm;
private OrientationSensorListener listener;
private Sensor sensor;
private SensorManager sm1;
private Sensor sensor1;
private OrientationSensorListener1 listener1;
private Handler mHandler=new Handler() {
 public void handleMessage(Message msg) {
  switch (msg.what) {
  case 888:
int orientation=msg.arg1;
if (orientation > 45 && orientation < 135) {    } else if (orientation > 135 && orientation < 225) {    } else if (orientation > 225 && orientation < 315) {     if (isPortrait) {      Log.e(test, 切換成橫屏);      mActivity.setRequestedOrientation(0);      isPortrait=false;     }    } else if ((orientation > 315 && orientation < 360) || (orientation > 0 && orientation < 45)) {     if (!isPortrait) {      Log.e(test,切換成豎屏);      mActivity.setRequestedOrientation(1);      isPortrait=true;     }    }    break;   default:    break;   }  }; }; public static ScreenSwitchUtils init(Context context) {  if (mInstance==null) {   synchronized (ScreenSwitchUtils.class) {    if (mInstance==null) {     mInstance=new ScreenSwitchUtils(context);    }   }  }  return mInstance; } private ScreenSwitchUtils(Context context) {  Log.d(TAG, init orientation listener.);  // 注冊(cè)重力感應(yīng)器,監(jiān)聽(tīng)屏幕旋轉(zhuǎn)  sm=(SensorManager) context.getSystemService(Context.SENSOR_SERVICE);  sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  listener=new OrientationSensorListener(mHandler);  // 根據(jù) 旋轉(zhuǎn)之后/點(diǎn)擊全屏之后 兩者方向一致,激活sm.  sm1=(SensorManager) context.getSystemService(Context.SENSOR_SERVICE);  sensor1=sm1.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  listener1=new OrientationSensorListener1(); } public void start(Activity activity) {  Log.d(TAG, start orientation listener.);  mActivity=activity;  sm.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_UI); } public void stop() {  Log.d(TAG, stop orientation listener.);  sm.unregisterListener(listener);  sm1.unregisterListener(listener1); } public void toggleScreen() {  sm.unregisterListener(listener);  sm1.registerListener(listener1, sensor1,SensorManager.SENSOR_DELAY_UI);  if (isPortrait) {   isPortrait=false;   // 切換成橫屏   mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  } else {   isPortrait=true;   // 切換成豎屏   mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  } } public boolean isPortrait(){  return this.isPortrait; } public class OrientationSensorListener implements SensorEventListener {  private static final int _DATA_X=0;  private static final int _DATA_Y=1;  private static final int _DATA_Z=2;  public static final int ORIENTATION_UNKNOWN=-1;  private Handler rotateHandler;  public OrientationSensorListener(Handler handler) {   rotateHandler=handler;  }  public void onAccuracyChanged(Sensor arg0, int arg1) {  }  public void onSensorChanged(SensorEvent event) {   float[] values=event.values;   int orientation=ORIENTATION_UNKNOWN;   float X=-values[_DATA_X];   float Y=-values[_DATA_Y];   float Z=-values[_DATA_Z];   float magnitude=X * X + Y * Y;   // Don't trust the angle if the magnitude is small compared to the y   // value   if (magnitude * 4 >=Z * Z) {
// 屏幕旋轉(zhuǎn)時(shí)
float oneEightyOverPi=57.f;
float angle=(float) Math.atan2(-Y, X) * OneEightyOverPi;
orientation=90 - (int) Math.round(angle);
// normalize to 0 - 359 range
while (orientation >=360) {
orientation -=360;
}
while (orientation < 0) {     orientation +=360;    }   }   if (rotateHandler !=null) {    rotateHandler.obtainMessage(888, orientation, 0).sendToTarget();   }  } } public class OrientationSensorListener1 implements SensorEventListener {  private static final int _DATA_X=0;  private static final int _DATA_Y=1;  private static final int _DATA_Z=2;  public static final int ORIENTATION_UNKNOWN=-1;  public OrientationSensorListener1() {  }  public void onAccuracyChanged(Sensor arg0, int arg1) {  }  public void onSensorChanged(SensorEvent event) {   float[] values=event.values;   int orientation=ORIENTATION_UNKNOWN;   float X=-values[_DATA_X];   float Y=-values[_DATA_Y];   float Z=-values[_DATA_Z];   float magnitude=X * X + Y * Y;   // Don't trust the angle if the magnitude is small compared to the y   // value   if (magnitude * 4 >=Z * Z) {
// 屏幕旋轉(zhuǎn)時(shí)
float oneEightyOverPi=57.f;
float angle=(float) Math.atan2(-Y, X) * OneEightyOverPi;
orientation=90 - (int) Math.round(angle);
// normalize to 0 - 359 range
while (orientation >=360) {
orientation -=360;
}
while (orientation < 0) {     orientation +=360;    }   }   if (orientation > 225 && orientation < 315) {// 檢測(cè)到當(dāng)前實(shí)際是橫屏    if (!isPortrait) {     sm.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_UI);     sm1.unregisterListener(listener1);    }   } else if ((orientation > 315 && orientation < 360) || (orientation > 0 && orientation < 45)) {// 檢測(cè)到當(dāng)前實(shí)際是豎屏    if (isPortrait) {     sm.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_UI);     sm1.unregisterListener(listener1);    }   }  } } }

安卓傳感器 重力:Android開(kāi)發(fā)之重力傳感器

重力傳感器與方向傳感器的開(kāi)發(fā)步驟類(lèi)似,只要理清了期中的x,y,z的值之后就可以根據(jù)他們的變化來(lái)進(jìn)行編程了,首先來(lái)看一副圖

假設(shè)當(dāng)?shù)氐闹亓铀俣戎禐間
當(dāng)手機(jī)正面朝上的時(shí)候,z的值為q,反面朝上的時(shí)候,z的值為-g
當(dāng)手機(jī)右側(cè)面朝上的時(shí)候,x的值為g,右側(cè)面朝上的時(shí)候,x的值為-g
當(dāng)手機(jī)上側(cè)面朝上的時(shí)候,y的值為g,右側(cè)面朝上的時(shí)候,y的值為-g
了解了重力傳感器中X,Y,Z的含義之后下面我們就開(kāi)始學(xué)習(xí)如何使用
首先我們創(chuàng)建一個(gè)傳感器管理器和一個(gè)傳感器監(jiān)聽(tīng)器,管理器用來(lái)管理傳感器以及創(chuàng)建各種各樣的傳感器,監(jiān)聽(tīng)器用來(lái)監(jiān)視傳感器的變化并且進(jìn)行相應(yīng)的操作
private SensorManager sensorManager;
private MySensorEventListener mySensorEventListener;
mySensorEventListener=new MySensorEventListener();//這個(gè)監(jiān)聽(tīng)器當(dāng)然是我們自己定義的,在重力感     應(yīng)器感應(yīng)到手機(jī)位置有變化的時(shí)候,我們可以采取相應(yīng)的操作,這里緊緊是將x,y,z的值打印出來(lái)
private final class MySensorEventListener implements  SensorEventListener{

@Override
//可以得到傳感器實(shí)時(shí)測(cè)量出來(lái)的變化值
public void onSensorChanged(SensorEvent event) {
//重力傳感器
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
float x=event.values[SensorManager.DATA_X];
float y=event.values[SensorManager.DATA_Y];
float z=event.values[SensorManager.DATA_Z];
//tv_accelerometer是界面上的一個(gè)TextView標(biāo)簽,不再贅述
tv_orientation.setText("Orientation:"+x+","+y+","+z);
}
}

我們?cè)趏nResume方法中創(chuàng)建重力傳感器,并向系統(tǒng)注冊(cè)監(jiān)聽(tīng)器
protected void onResume() {
Sensor sensor_accelerometer=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(mySensorEventListener,sensor_accelerometer,   SensorManager.SENSOR_DELAY_UI);

super.onResume();
}
最后我們?cè)趏nPause()中注銷(xiāo)所有傳感器的監(jiān)聽(tīng),釋放重力感應(yīng)器資源!
protected void onPause() {
/注銷(xiāo)所有傳感器的監(jiān)聽(tīng)
sensorManager.unregisterListener(mySensorEventListener);
super.onPause();
}
到此,有關(guān)重力傳感器的介紹完畢!
安卓傳感器 重力:Android - 小功能 - 傳感器之重力傳感器  第3張

安卓傳感器 重力:安卓傳感器-重力傳感器

? ? 1、SensorManager mSensorManager = (SensorManager)this.getSystemService(Context.SENSOR_SERVICE); ? //獲取傳感器管理對(duì)象
? ? 2、Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); ? //獲得傳感器類(lèi)型,這里Sensor.TYPE_ACCELEROMETER是重力傳感器
? ? 3、mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME); ?//為傳感器注冊(cè)監(jiān)聽(tīng)器
? ? 4、繼承傳感器時(shí)間接口SensorEventListener,重寫(xiě)方法,在方法中第重力傳感器獲得的數(shù)據(jù)進(jìn)行操作
? ? ? ? ? ? ? ?//獲得各個(gè)方向上的重力分量

x = event.values[SensorManager.DATA_X];

y = event.values[SensorManager.DATA_Y];

z = event.values[SensorManager.DATA_Z];
? ? ? ? ? 至于SensorManager.DATA_Y為什么會(huì)過(guò)時(shí)就不得而知了,可能有了更好的方法?在這里歡迎交流

下一篇: PLC、DCS、FCS三大控

上一篇: 電氣控制線(xiàn)路圖控制原

主站蜘蛛池模板: 亚克隆,RNAi干扰检测,miRNA定量检测-上海基屹生物科技有限公司 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 东风体检车厂家_公共卫生体检车_医院体检车_移动体检车-锦沅科贸 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 洗地机-全自动/手推式洗地机-扫地车厂家_扬子清洁设备 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 高博医疗集团上海阿特蒙医院 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 嘉兴泰东园林景观工程有限公司_花箱护栏 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 天津蒸汽/热水锅炉-电锅炉安装维修直销厂家-天津鑫淼暖通设备有限公司 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 阿里巴巴诚信通温州、台州、宁波、嘉兴授权渠道商-浙江联欣科技提供阿里会员办理 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 |