超精准的Android手机计步器开发
程序员文章站
2024-03-03 18:47:10
亲测在小米.魅族.华为上可用,该app采用后台service计歩服务,所以只要app不被手机杀死在后台也是可以正常计歩的。上图:
1.需要在androidma...
亲测在小米.魅族.华为上可用,该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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 深入浅析Java中的volatile
下一篇: python下实现二叉堆以及堆排序的示例
推荐阅读
-
超精准的Android手机计步器开发
-
Android开发之获取SD卡及手机ROM容量的方法
-
Android开发之获取SD卡及手机ROM容量的方法
-
Android开发中调用系统相册上传图片到服务器OPPO等部分手机上出现短暂的显示桌面问题的解决方法
-
Android开发中调用系统相册上传图片到服务器OPPO等部分手机上出现短暂的显示桌面问题的解决方法
-
超精准的iOS计步器实现代码
-
名为“低价手机”的飓风刮来•开发者能做什么—《Android系统源代码情景分析》 试读随笔
-
超精准的iOS计步器实现代码
-
android开发之调用手机的摄像头使用MediaRecorder录像并播放
-
android开发中获取手机分辨率大小的方法