- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在三星 S6 上使用心率传感器。为了访问此传感器,从 SDK 版本 > 23 开始,用户必须授予 BODY_SENSORS 权限 https://stackoverflow.com/a/32636039/8204927到目前为止,我已经完成了以下工作
在 list 中添加 BODY_SENSORS 权限
由于目标 SDK 版本为 23,首先我检查应用程序是否授予 BODY_SENSORS 权限,如果没有,则显示提示要求用户授予权限
一旦用户授予权限,我将通过以下方式访问 HeartRateSensor
传感器管理器 sensorManager =((SensorManager)getSystemService(SENSOR_SERVICE));
传感器 heartRateSensor =sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);sensorManager.registerListener(this, heartRateSensor,SensorManager.SENSOR_DELAY_NORMAL);
一切正常,我得到了预期的 bpm 读数。
但是,当我将此逻辑移动到另一个 Activity 时,我得到了heartRateSensor == null,即使 BODY_SENSORS 已以与上述相同的方式授予。我发现,在授予 BODY_SENSORS 权限之前,Android 的 SystemSensorManager 已将所有可用的传感器类型缓存在 mSensorListByType 列表中,并且该列表在授予权限后不会刷新。
通过调试我发现第二个 Activity 覆盖了 onResume
@Override
protected void onResume() {
super.onResume();
...
}
还有那个 super.onResume();通话
public List<Sensor> getSensorList(int type) {
// cache the returned lists the first time
...
}
SensorManager 类的,它填充 mSensorListByType,并且该列表在应用程序重新启动之前不会更新。
在运行时授予 BODY_SENSOR 权限后,是否有任何方法可以强制 SensorManager 更新此列表,或者我必须要求用户在任何覆盖 onResume 的 Activity 启动之前授予 BODY_SENSOR 权限?
最佳答案
我找到了解决此问题的方法。
MixPanel API 订阅 Application.ActivityLifecycleCallbacks,并且当创建第一个覆盖 onResume 的 Activity 时,MixPanel 将在 ViewCrawler 类中访问加速度计传感器。这将导致 SensorManager 缓存所有可用的传感器,并且这个列表即使授予 BODY_SENSOR 权限,传感器也不会更新。
通过在 Manifest 的 application 标签下添加如下元数据标签
android:name="com.mixpanel.android.MPConfig.DisableGestureBindingUI"
android:value="true" />
MixPanel API 被阻止访问 TYPE_ACCELEROMETER 传感器,因此在第一次调用 onResume 时缓存所有可用的传感器。
总的来说,这不是我所希望的解决方案。通过查看文档和 SDK 代码,这似乎是一个 Android 错误。此传感器缓存行为已添加到 API 1,并且未预料到添加到 API 23 的权限策略更改。
关于Android SensorManager 在运行时获取 BODY_SENSORS 权限后不更新 SensorList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350810/
要在 Android 中从欧拉角(例如俯仰、滚转、方位角)中获取方向,需要执行以下操作: SensorManager.getRotationMatrix(float[] R, float[] I, f
API 演示 -> 图形 -> Compass 它只能正常工作,直到您不更改设备的自然方向。在大多数手机中是纵向的,而大多数 10 英寸平板电脑是横向的。如果您进行更改,则需要将其旋转 90 度。我希
我的线程上有此命令,但它不起作用:sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 我想在不打开我的应用程序的情况下创
我希望实现一个 SensorManager 类,它可以处理所有与传感器相关的事情,但这显然需要我启动一个新 Activity 。 我不打算这样做 - 只是运行计算。是使用服务处理此问题的最佳方式,您可
我正在为平板电脑开发一个应用程序,平板电脑将放在一个围绕给定点旋转的支架上。这意味着当应用程序首次打开时,很少从平板电脑移动。该应用程序将根据平板电脑在支架上的旋转显示各种内容。无论我多么努力地搜索,
在我的应用中,我使用光线和接近传感器来检测手机自掏腰包功能,然后在检测完成后注销 SensorManager。但是,即使应用程序的 CPU 使用率仅显示 1-2 秒,电池使用率始终显示我的应用程序为否
我的应用程序创建了一个 Service,它覆盖了 onStartCommand 以创建一个 SensorManager 并将一个 SensorEventListener 附加到其中一个传感器: pub
我需要检索手机的方向。目前我写了这个: public void onSensorChanged(SensorEvent event) { switch (event.sensor.getType(
我正在为我的 Android 应用程序使用传感器。我用一行代码注册传感器: mySensorManager.registerListener(this, orientationSensor, Sens
我在以下的帮助下获得了我的手机方向 SensorManager.getOrientation 但是结果很不稳定,大概+-8度,有什么好的过滤结果的方法吗? 这是我获取值的方式: public void
我有一个为 Cordova 应用程序编写的 Android 后台服务,我想通过 sensorManager 与加速度计进行交互。 我觉得我已经很接近了,但我认为还不够。 出于某种原因,sensorMa
我在 logcat 中遇到传感器管理器和错误的问题。当我用这一行注册监听器时: sensorMgr.registerListener(this, sensorMgr.getDefaultSensor(
我在资源中找到了这个值。 /** Standard gravity (g) on Earth. This value is equivalent to 1G */ public static
我一直在研究如何在我的 Android 应用程序中读取步数,并在文档中找到了两种完全不同的方法: Using SensorManager : val sensorManager = getSystem
我使用单例模式实现了一个简单的指南针类。一旦我向传感器管理器注册了加速度计和磁力计监听器,内存消耗就会增加。我的 GPS 类与指南针类非常相似,并且我没有出现内存泄漏问题。我在 onSensorCha
@Override protected void onResume(){ //super.onResume(); sensorManager.registerListener
Scala/Android 新手问题。我正在尝试将这个简单的代码从 Java 重写为 Scala。Java 工作代码: private final SensorEventListener mAccLi
我的源代码是: import android.content.Context; import android.hardware.SensorManager; public class ShakeEve
我在三星 S6 上使用心率传感器。为了访问此传感器,从 SDK 版本 > 23 开始,用户必须授予 BODY_SENSORS 权限 https://stackoverflow.com/a/326360
我使用 StackOverflow 的一些建议编写了一个加速度计应用程序(用于学习目的)。一切正常,但我在代码中收到“SensorManager.DATA_X 已弃用”消息作为警告: // setup
我是一名优秀的程序员,十分优秀!