Android Sensor序列5(MTK )

Android Sensor序列5(MTK )---App实现获取gsensor数据

一、简介

前几篇sensor相关的文章介绍了sensor的hal及framework的知识,这一节以gsensor实时显示xyz轴坐标来分析,app层数据获取的过程,其实实现数据监控非常简单,主要分为下面三个步骤:

(1)获取Sensor服务:getSystemService;

(2)获取具体sensor对象:getDefaultSensor;

(3)注册数据监听器:registerListener;

二、详细过程分析

下面看实现数据显示的源码:

package com.example.yinpengzhang.myapplication_test2;

import android.content.Context;
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.widget.TextView;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
    private TextView mTextView_x = null;

    private TextView mTextView_y = null;
    private TextView mTextView_z = null;
    private SensorManager mSensorManager;
    private Sensor gsensor;
    private float mLastX,mLastY,mLastZ;
    private String sX,sY,sZ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //定义xyz内容显示框TextView
        mTextView_x = (TextView) findViewById(R.id.textView6);
        mTextView_y = (TextView) findViewById(R.id.textView7);
        mTextView_z = (TextView) findViewById(R.id.textView8);
        //获取Sensor服务
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //获取gsensor的对象
        gsensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        //注册数据监听器,当有数据时会回调onSensorChanged方法
        mSensorManager.registerListener((SensorEventListener) this, gsensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
    //重写数据监控的onSensorChanged方法
    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor == null)
            return ;
        //判断获取的数据类型是不是gsensor
        if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
            //获得数据为float类型的数据
            mLastX = event.values[0];
            mLastY = event.values[1];
            mLastZ = event.values[2];
            //将float类型的数据转为字符型供textView显示
            sX = String.valueOf(mLastX);
            sY = String.valueOf(mLastY);
            sZ = String.valueOf(mLastZ);

            mTextView_x.setText(sX);
            mTextView_y.setText(sY);
            mTextView_z.setText(sZ);
        }
    }
    protected void onStop(){   //同样在退出activity时要注销监听
        super.onStop();
        if(mSensorManager != null){
            mSensorManager.unregisterListener(this);
            mSensorManager = null;
        }
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}

上面代码中getSystemService是一个很重要的API, 根据传入的NAME来取得对应的Object,然后转换成相应的服务对象,例如:电源、震动、电话等服务,如下表所示。

传入的Name返回的对象说明
WINDOW_SERVICEWindowManager管理打开的窗口程序
LAYOUT_INFLATER_SERVICELayoutInflater取得xml里定义的view
ACTIVITY_SERVICEActivityManager管理应用程序的系统状态
POWER_SERVICEPowerManger电源的服务
ALARM_SERVICEAlarmManager闹钟的服务
NOTIFICATION_SERVICENotificationManager状态栏的服务
KEYGUARD_SERVICEKeyguardManager键盘锁的服务
LOCATION_SERVICELocationManager位置的服务,如GPS
SEARCH_SERVICESearchManager搜索的服务
VEBRATOR_SERVICEVebrator手机震动的服务
CONNECTIVITY_SERVICEConnectivity网络连接的服务
WIFI_SERVICEWifiManagerWi-Fi服务
TELEPHONY_SERVICETeleponyManager电话服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值