安卓计步器的简单实现

1.安卓的计步功能就是通过调用手机的传感器变化来进行计算的
首先修改AndroidManifest.xml添加权限
AndroidManifest.xml



    
    
    
        
            
                

                
            
        
    


2.修改MainActivity

 SensorManager mSensorManager;//管理器实例
    Sensor stepCounter;//传感器
    float mSteps = 0;//步数
    TextView steps;//显示步数
    TextView time;//显示时间

onCreate()函数

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取SensorManager管理器实例
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

        // getSensorList用于列出设备支持的所有sensor列表
        List sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
        Log.i(TAG,"Sensor size:"+sensorList.size());
        for (Sensor sensor : sensorList) {
            Log.i(TAG,"Supported Sensor: "+sensor.getName());
        }

        steps = (TextView)findViewById(R.id.steps);
        time = (TextView)findViewById(R.id.time);
        // 获取计步器sensor
        stepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
        if(stepCounter != null){
            // 如果sensor找到,则注册监听器
            mSensorManager.registerListener(this,stepCounter,1000000);
        }
        else{
            Log.e(TAG,"no step counter sensor found");
        }
    }

3.修改onSensorChanged(SensorEvent event)

@Override
    public void onSensorChanged(SensorEvent event) {
        mSteps = event.values[0];
        steps.setText("你已经走了"+String.valueOf((int)mSteps)+"步");
    }

4.添加实时时间更新显示
通过线程的实时传送信息更新当前时间

class TimeThread extends Thread {
        @Override
        public void run() {
            do {
                try {
                    Thread.sleep(1000);
                    Message msg = new Message();
                    msg.what = 1;  //消息(一个整型值)
                    mHandler.sendMessage(msg);// 每隔1秒发送一个msg给mHandler
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } while (true);
        }
    }

    //在主线程里面处理消息并更新UI界面
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    long sysTime = System.currentTimeMillis();//获取系统时间
                    CharSequence sysTimeStr = DateFormat.format("hh:mm:ss", sysTime);//时间显示格式
                    time.setText(sysTimeStr); //更新时间
                    break;
                default:
                    break;

            }
        }
    };

在 onCreate()添加线程的启动

new TimeThread().start();

5.activity_main.xml




    
    



6实现效果
安卓计步器的简单实现_第1张图片
安卓计步器的简单实现_第2张图片

相关资料:https://www.jianshu.com/p/ccf8aac0fb9d
作者:颜英东 原文链接

你可能感兴趣的:(Android)