转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/52868803

本文出自【DylanAndroid的博客】


Android超精准计步器开发

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








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

  1. <!--计歩需要的权限-->
  2. <uses-permission android:name="android.permission.VIBRATE" />
  3. <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  4. <uses-feature android:name="android.hardware.sensor.accelerometer" />
  5. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  6. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  7. <uses-feature
  8. android:name="android.hardware.sensor.stepcounter"
  9. android:required="true" />
  10. <uses-feature
  11. android:name="android.hardware.sensor.stepdetector"
  12. android:required="true" />

2.检测手机是否支持计歩

  1. /**
  2. * 判断该设备是否支持计歩
  3. *
  4. * @param context
  5. * @return
  6. */
  7. @TargetApi(Build.VERSION_CODES.KITKAT)
  8. public static boolean isSupportStepCountSensor(Context context) {
  9. // 获取传感器管理器的实例
  10. SensorManager sensorManager = (SensorManager) context
  11. .getSystemService(context.SENSOR_SERVICE);
  12. Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
  13. Sensor detectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
  14. return countSensor != null || detectorSensor != null;
  15. }

3.功能使用


  1. private boolean isBind = false;
  2. private Messenger mGetReplyMessenger = new Messenger(new Handler(this));
  3. private Messenger messenger;
  4. /**
  5. * 开启计步服务
  6. */
  7. private void setupService() {
  8. Intent intent = new Intent(this, StepService.class);
  9. isBind = bindService(intent, conn, Context.BIND_AUTO_CREATE);
  10. startService(intent);
  11. }
  12. /**
  13. * 从service服务中拿到步数
  14. *
  15. * @param msg
  16. * @return
  17. */
  18. @Override
  19. public boolean handleMessage(Message msg) {
  20. switch (msg.what) {
  21. case Constant.MSG_FROM_SERVER:
  22. cc.setCurrentCount(10000, msg.getData().getInt("step"));
  23. break;
  24. }
  25. return false;
  26. }
  27. /**
  28. * 用于查询应用服务(application Service)的状态的一种interface,
  29. * 更详细的信息可以参考Service 和 context.bindService()中的描述,
  30. * 和许多来自系统的回调方式一样,ServiceConnection的方法都是进程的主线程中调用的。
  31. */
  32. ServiceConnection conn = new ServiceConnection() {
  33. /**
  34. * 在建立起于Service的连接时会调用该方法,目前Android是通过IBind机制实现与服务的连接。
  35. * @param name 实际所连接到的Service组件名称
  36. * @param service 服务的通信信道的IBind,可以通过Service访问对应服务
  37. */
  38. @Override
  39. public void onServiceConnected(ComponentName name, IBinder service) {
  40. try {
  41. messenger = new Messenger(service);
  42. Message msg = Message.obtain(null, Constant.MSG_FROM_CLIENT);
  43. msg.replyTo = mGetReplyMessenger;
  44. messenger.send(msg);
  45. } catch (RemoteException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. /**
  50. * 当与Service之间的连接丢失的时候会调用该方法,
  51. * 这种情况经常发生在Service所在的进程崩溃或者被Kill的时候调用,
  52. * 此方法不会移除与Service的连接,当服务重新启动的时候仍然会调用 onServiceConnected()。
  53. * @param name 丢失连接的组件名称
  54. */
  55. @Override
  56. public void onServiceDisconnected(ComponentName name) {
  57. }
  58. };

GitHub地址

Android超精准计步器开发-Dylan计步的更多相关文章

  1. Android超精准计步器开发-Dylan计步(申明:来源于网路)

    Android超精准计步器开发-Dylan计步(申明:来源于网路) 拿来借鉴学习,向原创者... 地址:http://blog.csdn.net/linglongxin24/article/detai ...

  2. Android | 教你如何开发扫二维码功能

    前言   最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗 ...

  3. Android与Swift iOS开发:语言与框架对比

    Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...

  4. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  5. 总结android项目的基本开发步骤(转帖)

    总结android项目的基本开发步骤(转帖)   做了几个android企业应用项目后,总结了项目的基本开发步骤,希望能够交流.一 应用规划:    ※确定功能.    ※必须的界面及界面跳转的流程. ...

  6. Eclipse+ADT+Android SDK 搭建安卓开发环境

    Eclipse+ADT+Android SDK 搭建安卓开发环境   要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); eclipse-jee-luna-SR2 ...

  7. android音乐播放器开发教程

    android音乐播放器开发教程 Android扫描sd卡和系统文件 Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能 android操作sdcard中的多媒体文件——音乐列表 ...

  8. Android腾讯微博开发之随机字符串与签名实现

    Android腾讯微博开发入门之随机字符串与签名实现   直接上代码   1.Utils类,包括签名和随机字符串   import java.util.Random; import javax.cry ...

  9. Android系统Google Maps开发实例浅析

    Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用. ...

随机推荐

  1. POJ-2349 Arctic Network---MST的第m长的边

    题目链接: https://vjudge.net/problem/POJ-2349 题目大意: 要在n个节点之间建立通信网络,其中m个节点可以用卫星直接连接,剩下的节点都要用线路连接,求剩下这些线路中 ...

  2. php实现记住密码自动登录的功能

    $username=trim($_POST['username']); $password=md5(trim($_POST['password'])); $ref_url=$_GET['req_url ...

  3. Java中的几种常用循环

     循环的条件 反复执行一段相同或相似的代码 一     for循环        先判断,再执行   代码示例为 ① for (int i = 0; i < args.length; i++) ...

  4. SQL Server 2008 R2 安装注意事项

    上个星期自己第一次安装SQL Server 2008 R2,安装失败几次,结果用了将近1天的时间安装,最后成功了. 心得:1.安装SQL Server 2008 R2时,最好在第一次就安装成功.在百度 ...

  5. drupal 8 之 calendar模块

    一.安装模块 calendar.view.date三个模块同时安装 二.创建一个事件内容类型 主要的是有一个时间字段 然后添加一个事件内容进行测试 [保存并发布] 三.创建日历视图 点击[结构]> ...

  6. [LeetCode] Output Contest Matches 输出比赛匹配对

    During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...

  7. BZOJ 4260 Codechef REBXOR

    Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. Sample ...

  8. [AHOI2016初中组]迷宫

    题目描述 小雪和小可可被困在了一个无限大的迷宫中. 已经知道这个迷宫有 N 堵环状的墙,如果把整个迷宫看作是一个二维平面,那么每一堵墙都是平面上一个圆.任意两个圆不相交,不重合,也不会相切, 但有可能 ...

  9. 计蒜客NOIP模拟赛4 D1T3 小X的佛光

    小 X 是远近闻名的学佛,平日里最喜欢做的事就是蒸发学水. 小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X ...

  10. [BZOJ]1031 字符加密Cipher(JSOI2007)

    持续划水中…… 感觉BZOJ上AC人数多的基本都是一些模板题,也就是某些算法的裸题.这些题目mark一下到时候回来复习也是不错的选择. Description 喜欢钻研问题的JS同学,最近又迷上了对加 ...