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

本文出自【DylanAndroid的博客】


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地址

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. Checkbutton

    #tkinter之Checkbutton篇 #Checkbutton又称为多选按钮,可以表示两种状态,On和Off,可以设置回调函数,每当点击此按钮时回调函数被调用. 1.一个简单的Checkbutt ...

  2. 多线程编程、java图形用户界面编程、Java I / O系统

    线程概述 进程:是一种 “自包容”的运行程序 线程是进程当中的一个概念,最小处理单位 THread类.Runnable接口.Object类 创建新执行线程有两种方法:1:一种方法是将类声明为Threa ...

  3. java 连接mysql

    目前还沉浸在java自动化测试中不能自拔! 自动化过程中免不了要从数据库取值与期望值比较,目前我项目刚开始就需要用到了. 下面我把操作过程写下来: 我的项目框架是java+maven+testNG,所 ...

  4. JAVA循环结构示例

    本文章主要是帮助大家学习循环结构.学习循环时,最重要的是理清思路,那些最经典算法实际中我们并不会单拿出来用,而是会用到当时做这个算法时的思想.如果把这个思路想明白了,那么实际中用到他的时候自然而然就想 ...

  5. scala求交集、并集、差集命令

    交集 scala> Set(1,2,3) & Set(2,4)res1: scala.collection.immutable.Set[Int] = Set(2) 并集 scala> ...

  6. 初探java对象比较

    判断两个对象的属性值是否相等的方法, class Book{ private String title; private double price; public Book(String title, ...

  7. [LeetCode] Count Different Palindromic Subsequences 计数不同的回文子序列的个数

    Given a string S, find the number of different non-empty palindromic subsequences in S, and return t ...

  8. [LeetCode] Map Sum Pairs 映射配对之和

    Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a pair ...

  9. [LeetCode] Beautiful Arrangement II 优美排列之二

    Given two integers n and k, you need to construct a list which contains n different positive integer ...

  10. [LeetCode] Encode and Decode TinyURL 编码和解码精简URL地址

    Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL sho ...