超精准的Android手机计步器开发

亲测在小米.魅族.华为上可用,该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) {
        }
    };

GitHub地址:https://github.com/linglongxin24/DylanStepCount

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现简易计步器功能隔天步数清零查看历史运动纪录

    最近需要用到计步功能,这可难坏我了,iOS端倒好,有自带的计步功能,让我惊讶的是连已爬楼层都给做好了,只需要调接口便可获得数据,我有一句MMP,我很想讲. 但是抱怨归抱怨,功能还是得事先的去实现,微信运动,乐动力,都还不错,尤其是乐动力的计步功能真的非常的强大,在UI域用户与用户交互也做得非常棒,党来内需当连续运动十步后开始计步.本想着去找他们实现的算法然后拿来用,但很明显这是不可能的.后来我搜了很多资料发现,在Android4.4 Kitkat 新增的STEP DETECTOR 以及 STEP

  • Android计步功能的实现代码

    本文对原文计步项目进行了精简,移除了进程服务和计时.守护进程.数据库保存等等,方便扩展功能. Android4.4以上版本,有些手机有计步传感器可以直接使用, 而有些手机没有,但有加速度传感器,也可以实现计步功能(需要计算加速度波峰波谷来判断人走一步)! 一.使用 public class MainActivity extends AppCompatActivity implements StepCallBack{ ......... @Override public void Step(int

  • Android计步模块实例代码(类似微信运动)

    最近在项目中研究计步模块,每天0点开始记录当天的步数,类似微信运动.碰到了不少坑今天有时间整理出来给大家看看. 做之前在google.baidu.github上搜了个遍没找到好的,大多数都是需要在后台存活,需要后台Service. 对于现在的各大手机厂商为了提高电池的续航里程(省电),基本上AlertManager. android.intent.action.BOOT_COMPLETED.后台Service都是被干掉的. 后台保活策略Service,基本上没什么用,被手机系统干掉只是时间问题,

  • Android实现计步进度的环形Progress

    项目中需要实现一个计步进度的环形Progress,当未达到设定目标时,绘制特定弧度((已实现步数/目标步数)*360°)的圆弧.当已实现步数大于等于目标步数时绘制整个360°圆环. 效果图: 代码实现: 设置已完成步数和目标步数: public void setStep(int stepDone, int stepGoal) { this.stepDone = stepDone; this.stepGoal = stepGoal; int progess = (stepDone * 100) /

  • 超精准的Android手机计步器开发

    亲测在小米.魅族.华为上可用,该app采用后台service计歩服务,所以只要app不被手机杀死在后台也是可以正常计歩的.上图: 1.需要在AndroidManifest.xml中添加权限 <!--计歩需要的权限--> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRI

  • 浅谈Android手机联系人开发之增删查改功能

    最近在做手机联系人的功能模块的时候,遇到了很多的坑,在网上搜索的有一些所谓的最全的手机联系人开发的介绍还存在一些bug,所以我把我最近的项目心得和方法写下来,既能帮助大家减少了解android开发手机联系人的门槛,好,废话少说,接下来直奔主题. 一.深入浅出手机联系人的前奏(小米手机的data表跟模拟器的data表不一样) 1.手机联系人主要是对contacts2.db数据库表的操纵,这个数据库中有三个表是比较重要的,分别是data,raw_contacts,mimetyps这三个表.在下面的增

  • C#之Android手机App开发

    目前Android在全世界市场上大约有75%的占有率,国人Android手机的持有比例更甚,甚至达到90%以上.因此搞计算机的一听说手机应用开发,一个个都像着了魔似的,既然有那么多人对它感兴趣,那咱也跟着玩一玩.但是,本模块不是介绍如何用Java开发,而是全部用C#去实现. 为什么用C#去实现?原因很简单,目前手机市场经过多年的你争我斗,现在就剩下Android.iOS.Windows Phone还能互相斗狠,其他的统统都被打趴下找不着北了.但是,学Android应用开发要用Java.学iOS应

  • Android个人手机通讯录开发详解

    一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示 2. 文件结构简单分析 三.个人手机通讯录代码实现 1. 清单文件 (AndroidManifest.xml) <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.andr

  • 超详细的Android开发调试工具ADB命令及安装介绍

    目录 一.ADB简介 二.安装ADB 三.环境变量 四.连接真机 五.常用命令 查看ADB版本 帮助信息(重要) 开启ADB服务端 关闭ADB服务端 安装App 卸载App Push文件 Pull文件 查看日志 六.高级技巧- 指定多个设备中的1个或n个 WLAN连接 如何建立连接? 如何断开WLAN连接? 七.高级Unix命令行工具(Android基于Linux内核) 查看Android设备可用命令(重要) 执行任意的可用命令 input 八.经常使用的Unix命令行工具 九.ADB原理 采用

  • Android手机开发设计之记事本功能

    本文实例为大家分享了Android手机开发设计之记事本功能,供大家参考,具体内容如下 一.需求分析 1.1业务需求分析 近年来,随着生活节奏的加快,工作和生活的双重压力全面侵袭着人们,如何避免忘记工作和生活中的诸多事情而造成不良的后果就显得非常重要.为此我们开发一款基于Android系统的简单记事本,其能够便携记录生活和工作对诸多事情,从而帮助人们有效地进行时间管理. 1.2功能需求分析 本记事本项目希望可以开发出一款符合用户生活工作习惯的简单应用,能够满足用户的各方面需求,可以对记事进行增加.

  • Android手机屏幕敲击解锁功能代码

    1.前言 现在市面上有不少Android手机支持敲击屏幕解锁,敲击屏幕解锁是一项很实用的功能,但一来只支持敲击屏幕,二来只能用于解锁或锁屏,再者我们应用层的开发者切不进去,完全无法玩起来.开发者,开发者,我们既然身为开发者何不搞点大新闻,那么这次我来教教各位如何用代码来实现手机的敲击识别,听起来是不是很有趣,有些跃跃欲试呢.事实上在ios上已经有实现这个功能的应用:Knock,一款敲击来解锁Mac电脑的应用,售价4.99美元,约为33人民币.有时候真想去做ios开发,可以开心的为自己的应用定价,

  • 浅析Android手机卫士手机定位的原理

    推荐阅读: 浅析Android手机卫士sim卡绑定 深入浅析Android手机卫士保存密码时进行md5加密 详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 浅析Android手机卫士读取联系人 浅析Android手机卫士接收短信指令执行相应操作 手机定位的三种方式:网络定位,基站定位,GPS定位 网络定位,手机连上wifi 2g 3g的时候,手机会有一个ip,误差很大 基站定位,精确度与基站的多少有关,几十米到几公里的

  • 通过WIFI(不用数据线)连接Android手机调试

    Android开发中少不了真机调试,总用数据线插插拔拔的还是不方便也不稳定,其实可以实现WIFI的方式连接android手机. 1. 当然首先要打开WIFI,手机要和电脑在同一局域网内. 2. 在手机上安装AdbWireless(Google Play上需搜一下就有),注意手机是需要root过的. 3. 安装完毕后在手机上启动AdbWireless,按屏幕中央的大按钮激活无线连接: 如何通过WIFI连接(不用数据线)Android手机调试 4. 按照屏幕提示,在电脑上从Android SDK\p

  • Android手机联系人快速索引(手机通讯录)

    最近需要实现一个手机通讯录的快速索引功能.根据姓名首字母快速索引功能.下面是一个手机联系人快速索引的效果,总体来说代码不算难,拼音转换的地方略有复杂.下面上源码:源码中有注释. 下面是效果图: MainActivity: import java.util.ArrayList; import java.util.Collections; import java.util.List; import android.app.Activity; import android.os.Bundle; imp

随机推荐