Android 摇一摇功能实现,重力加速度大于15

最近接到需求实现摇一摇需求,不过这个法律限制的很严格,属于敏感地带,实现后又被叫停了。

法律要求:
摇一摇

如果按照规定,操作时间不少于3s就基本没什么跳转了。
实现的话,只考虑了第一条,即:x,y,z只要有一个方向重力加速度大于15就可以跳转。

工具类:

public class ShakeUtils implements SensorEventListener {private ArrayList<OnShakeListener> mOnShakeListeners = null;// 触发Shake的最小时间间隔
//    private static final int MIN_SHAKE_INTERVAL = 1024;private static final int MIN_SHAKE_INTERVAL = 500;// 上次触发Shake操作的时间private long mLastShakeTime = 0L;private long mLastUpdateTime = 0L;// 两次摇晃的最小时间间隔private static final int SHAKE_INTERVAL_MILLSECOND = 55;// 上次摇晃的重力坐标位置private float mLastX = 0;private float mLastY = 0;private float mLastZ = 0;public interface OnShakeListener {void onShake();}private SensorManager mSensorManager;public ShakeUtils() {Context context = App.getInstance();mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);mOnShakeListeners = new ArrayList<>();}public void bindShakeListener(OnShakeListener listener) {if (listener != null) {mOnShakeListeners.add(listener);}}// 销毁public void unBindShakeListener(OnShakeListener listener) {if (mOnShakeListeners != null) {mOnShakeListeners.remove(listener);}if (mSensorManager != null) {mSensorManager.unregisterListener(this);}}@Overridepublic void onSensorChanged(SensorEvent event) {if (event == null) {return;}long curUpdateTime = System.currentTimeMillis();// 两次位置改变的时间间隔long timeInterval = curUpdateTime - mLastUpdateTime;if (timeInterval < SHAKE_INTERVAL_MILLSECOND) {return;}if (event.values.length < 3) {return;}mLastUpdateTime = curUpdateTime;float x = event.values[0];float y = event.values[1];float z = event.values[2];float deltaX = x - mLastX;float deltaY = y - mLastY;float deltaZ = z - mLastZ;mLastX = x;mLastY = y;mLastZ = z;// 法律要求不低于15// 如果不敏感请自行调低该数值,低于10的话就不行了,因为z轴上的加速度本身就已经达到10了int medumValue = 16;// 只要有一个重力加速度大于16就可以if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {
//            DebugUtil.error("---onShake speed- x轴方向的重力加速度" + Math.abs(x) + ";y轴方向的重力加速度" + Math.abs(y) + ";z轴方向的重力加速度" + Math.abs(z));startShake();}// 如果使用这个方式,建议值是450,或者500
//        double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) * 1000.0 / timeInterval;
//        if (speed >= SPEED_SHAKE_MILLSECONDS) {
//            startShake(speed);
//        }}private void startShake() {long curShakeTime = System.currentTimeMillis();if (curShakeTime - mLastShakeTime < MIN_SHAKE_INTERVAL) {return;}mLastShakeTime = curShakeTime;if (mOnShakeListeners != null) {for (int i = 0; i < mOnShakeListeners.size(); i++) {mOnShakeListeners.get(i).onShake();}}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}
}

直接放在Activity上即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/177744.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

太可怕啦!我在网上发了个贴,就被GPT-4推断出了个人隐私!GPT-4化身福尔摩斯

最近 GPT-4 被人发现了具有“福尔摩斯”一样的能力&#xff01; 可以仅仅通过帖子内容来推测出用户的隐私&#xff01; 瑞士苏黎世联邦理工学院的研究人员发现大语言模型可以对用户发在Reddit 帖子进行深度分析&#xff0c;并成功“猜测”出用户的年龄、地点、性别和收入等个…

Openssl X509 v3 AuthorityKeyIdentifier实验与逻辑分析

Openssl是X509的事实标准&#xff0c;目前主流OS或个别安全性要求较高的设计场景&#xff0c;对X509的证书链验证已经不在停留在只从数字签名校验了&#xff0c;也就是仅仅从公钥验签的角度&#xff0c;在这些场景中&#xff0c;往往还会校验AuthorityKeyIdentifier和SubjectKe…

2023年阿里云双11优惠活动,省钱攻略来了!

2023阿里云双11优惠活动开启了&#xff0c;轻量2核2G3M带宽服务器87元一年、2核4G4M带宽165元一年&#xff0c;云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年&#xff0c;新老用户同享&#xff0c;并且续费不涨价&#xff0c;第二年99元续费。阿里云个人和企业用户还…

抽象 I/O设备模型

I/O设备模型框架 RT-Thread提供了一套简单的I/O设备模型框架。 如图所示&#xff0c;它位于硬件和应用程序之间&#xff0c;共分成三层&#xff0c;从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。 应用程序通过I/O设备管理接口获得正确的设备驱动&#xff0c;然…

PC6410 DC-DC降压调整器低纹波高效率低功耗

PC6410是一款由基准电压源、振荡电路、比较器、PWM/PFM 控制电路等构成的CMOS降压DC/DC调整器。利用PWM/PFM自动切换控制电路达到可调占空比&#xff0c;具有全输入电压范围内的低纹波、高效率和大输出电流等特点。PC6410内置功率MOSFET&#xff0c;使用过压、过流、过热、短路…

为什么串行通信中停止位(停止bit、stop bit)通常使用高电平?

文章目录 基于高电平的停止位选择&#xff1a;理解其深层原因引言数据通信和停止位数据通信简介停止位的定义和作用 为什么选择高电平作为停止位&#xff1f;硬件的考虑误码率的影响 总结参考资料 基于高电平的停止位选择&#xff1a;理解其深层原因 引言 在数字通信中&#…

索引是什么?如何创建?哪些情况下需要使用?

在数据库中&#xff0c;索引是一种用于提高查询速度的数据结构。它可以帮助我们快速地找到需要的数据&#xff0c;而不必扫描整个数据库。如果你是一名业务人员&#xff0c;你可能会问&#xff1a;“为什么我们需要使用索引&#xff1f;” 一、什么是索引&#xff1f; 索引是一…

【word密码】word设置只读方式的四个方法

想要将word文档设置为只读模式&#xff0c;方法有很多&#xff0c;今天小奥超人介绍几个方法给大家。 方法一&#xff1a;文件属性 常见的、简单的设置方法&#xff0c;不用打开word文件&#xff0c;只需要右键选择文件&#xff0c;打开文件属性&#xff0c;勾选上【只读】选…

settings.json配置

settings.json配置 {"editor.tabSize": 2,"git.ignoreWindowsGit27Warning": true,"workbench.editor.untitled.hint": "hidden","security.workspace.trust.untrustedFiles": "open","[vue]": {"…

Mac电脑好用的窗口管理软件 Magnet 中文for mac

Magnet是一款用于Mac操作系统的窗口管理工具&#xff0c;它可以帮助您快速和方便地组织和管理应用程序窗口&#xff0c;以提高您的工作效率和多任务处理能力。 以下是Magnet的一些主要功能和特点&#xff1a; 窗口自动调整&#xff1a;Magnet允许您通过简单的拖放操作或使用快…

Linux系统编程,Linux中的文件读写文件描述符

文章目录 Linux系统编程&#xff0c;Linux中的文件读写操作1.open函数&#xff0c;打开文件 Linux系统编程&#xff0c;Linux中的文件读写操作 1.open函数&#xff0c;打开文件 我们来看下常用的open函数 这个函数最终返回一个文件描述符struct file 我们查看一下它的Ubuntu…

什么是集成测试?集成的方法有哪些?

前言 综合测试整合测试非常复杂&#xff0c;需要一些开发和逻辑技能。的确如此&#xff01;那么把这个测试整合到我们的测试策略中的目的是什么呢&#xff1f;这个问题我们先不着急回答&#xff0c;让我们一步步往下看你就知道了。 为什么要进行集成测试&#xff1f; 以下是一…