设为首页 加入收藏

TOP

Android对手机口袋状态的检测,距离传感器(一)
2018-04-13 06:06:28 】 浏览:419
Tags:Android 手机 口袋 状态 检测 距离 传感器

通常手机自带的距离传感器只能检测到几厘米的范围,一般用于判断手机在不在口袋中


public class ProximitySensor implements SensorEventListener {


    private static final String TAG = "ProximitySensor";
    private static ProximitySensor instance;


    private SensorManager mSensorManager;
    private float distance = -1;
    private boolean mHasStarted = false;


    private ProximitySensor() {
    }


    public static ProximitySensor getInstance() {
        if (instance == null) {
            instance = new ProximitySensor();
        }
        return instance;
    }


    /**
    * 启动距离传感器
    */
    public static void start(Context context) {
        ProximitySensor.getInstance().registerListener(context);
    }


    /**
    * 停止距离传感器
    */
    public static void stop() {
        ProximitySensor.getInstance().unregisterListener();
    }


    /**
    * 获取手机距离(单位厘米)
    */
    public static float getDistance() {
        return ProximitySensor.getInstance().getValue();
    }



    // ------------------------------------------------------------------------------


    /**
    * Use this method to start listening of the sensor
    */
    private void registerListener(Context context) {
        if (mHasStarted) {
            return;
        }
        mHasStarted = true;
        mSensorManager = (SensorManager) context.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
        Sensor proximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); // 获取距离传感器
        if (proximitySensor != null) { // 距离传感器存在时才执行
            mSensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL); // 注册事件监听
        }
    }


    /**
    * Use this method to stop listening of the sensor
    */
    private void unregisterListener() {
        if (!mHasStarted || mSensorManager == null) {
            return;
        }
        mHasStarted = false;
        mSensorManager.unregisterListener(this);
    }


    private float getValue() {
        if (!mHasStarted) {
            Log.w(TAG, "proximity sensor has not start!");
        }
        return distance;
    }


    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event != null && event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
            // values[0]: Proximity sensor distance measured in centimeters
            distance = event.values[0];
            Log

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇源码解析Flask的配置文件 下一篇Android获取本应用内存占用的方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目