欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-03 18:47:10
亲测在小米.魅族.华为上可用,该app采用后台service计歩服务,所以只要app不被手机杀死在后台也是可以正常计歩的。上图: 1.需要在androidma...

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

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

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

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

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

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