admin 发表于 2016-11-14 10:47:16

Android精准计步开发源码

Android精准计步开发源码

亲测在小米.魅族.华为上可用,自定义View实战


亲测在小米.魅族.华为上可用,该app采用后台service计歩服务,所以只要app不被手机杀死在后台也是可以正常计歩的。上图:




1.需要在AndroidManifest.xml中添加权限

    <!--计歩需要的权限-->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-feature android:name="android.hardware.sensor.accelerometer" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-feature
      android:name="android.hardware.sensor.stepcounter"
      android:required="true" />
    <uses-feature
      android:name="android.hardware.sensor.stepdetector"
      android:required="true" />2.检测手机是否支持计歩
/**
   * 判断该设备是否支持计歩
   *
   * @param context
   * @return
   */
    @TargetApi(Build.VERSION_CODES.KITKAT)
    public static boolean isSupportStepCountSensor(Context context) {
      // 获取传感器管理器的实例
      SensorManager sensorManager = (SensorManager) context
                .getSystemService(context.SENSOR_SERVICE);
      Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
      Sensor detectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
      return countSensor != null || detectorSensor != null;
    }

3.功能使用


    private boolean isBind = false;
    private Messenger mGetReplyMessenger = new Messenger(new Handler(this));
    private Messenger messenger;

    /**
   * 开启计步服务
   */
    private void setupService() {
      Intent intent = new Intent(this, StepService.class);
      isBind = bindService(intent, conn, Context.BIND_AUTO_CREATE);
      startService(intent);


    }
    /**
   * 从service服务中拿到步数
   *
   * @param msg
   * @return
   */
    @Override
    public boolean handleMessage(Message msg) {
      switch (msg.what) {
            case Constant.MSG_FROM_SERVER:
                cc.setCurrentCount(10000, msg.getData().getInt("step"));
                break;
      }
      return false;
    }


    /**
   * 用于查询应用服务(application Service)的状态的一种interface,
   * 更详细的信息可以参考Service 和 context.bindService()中的描述,
   * 和许多来自系统的回调方式一样,ServiceConnection的方法都是进程的主线程中调用的。
   */
    ServiceConnection conn = new ServiceConnection() {
      /**
         * 在建立起于Service的连接时会调用该方法,目前Android是通过IBind机制实现与服务的连接。
         * @param name 实际所连接到的Service组件名称
         * @param service 服务的通信信道的IBind,可以通过Service访问对应服务
         */
      @Override
      public void onServiceConnected(ComponentName name, IBinder service) {
            try {
                messenger = new Messenger(service);
                Message msg = Message.obtain(null, Constant.MSG_FROM_CLIENT);
                msg.replyTo = mGetReplyMessenger;
                messenger.send(msg);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
      }

      /**
         * 当与Service之间的连接丢失的时候会调用该方法,
         * 这种情况经常发生在Service所在的进程崩溃或者被Kill的时候调用,
         * 此方法不会移除与Service的连接,当服务重新启动的时候仍然会调用 onServiceConnected()。
         * @param name 丢失连接的组件名称
         */
      @Override
      public void onServiceDisconnected(ComponentName name) {

      }
    };


Android精准计步开发源码下载地址:


**** Hidden Message *****

Android精准计步开发源码
http://bbs.jiandaima.com/thread-732-1-1.html

zx2600657 发表于 2016-11-15 09:28:29

look look,学习一下经验

wshebb 发表于 2016-11-15 10:25:00

这个资源不错。感谢楼主!……来自于捡代码论坛

zxc473943199 发表于 2016-12-1 15:21:10

学习了。。。。。

2801623141 发表于 2016-12-10 22:06:34

的风格的方式官方订购

mikila 发表于 2016-12-28 09:43:49

谢谢楼主分享

imikila 发表于 2017-1-11 11:29:02

谢谢楼主,下载来看下

冷月宫主 发表于 2017-1-11 15:01:33

Android精准计步开发源码

Selven 发表于 2017-1-12 14:53:43

学习学习

caihj 发表于 2017-1-16 10:26:51

学习学习
页: [1] 2 3 4 5
查看完整版本: Android精准计步开发源码