那里有没有配备气压传感器的Android设备?
我知道android.hardware.Sensor类有一个TYPE_PRESSURE常量,该getAltitude方法SensorManager几乎提到了大气压力.
那么,是否有任何Android手机都有晴雨表?
我想知道我的Android设备上是否有传感器(例如accellerometer).
我正在处理SensorManager类.这是我正在使用的代码:
sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorMgr.registerListener(this,sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),1);
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在尝试使用accelorometer和磁场传感器用Android编程指南针,现在我想知道如何为我的指南针获得正确的角度.
我分别用"加速度"和"磁力"读取加速度计和磁场传感器的值.为了获得角度,我执行以下操作:
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, accele, magne);
if(success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
azimuth = orientation[0]; // contains azimuth, pitch, roll
....
Run Code Online (Sandbox Code Playgroud)
后来,我使用旋转矩阵来放我的针:
rotation.setRotate(azimuth, compass.getWidth() / 2, compass.getHeight() / 2);
canvas.drawBitmap(needle, rotation, null);
Run Code Online (Sandbox Code Playgroud)
现在,getOrientation的文档说,方向[0]应该是围绕z轴的旋转.TYPE_ORIENTATION的文档指出"方位角,磁北方向和y轴之间的角度,围绕z轴(0到359).0 =北,90 =东,180 =南,270 =西".
然而,我的方位角不在0到359之间,而是在-2到2之间.来自getOrientation的方位角到底是什么?如何将其转换为角度?
使用我的Android设备如何检测用户是走路,骑自行车还是开车?我查看了Google健身应用.它区分跑步,骑自行车和驾驶.我很困惑我应该用什么算法来区分这些活动.
我知道我必须使用加速计传感器.但我仍无法区分这些活动.
我已经为Android WebView编写了一个JS SDK,该SDK收集设备的方向和运动。SDK侦听窗口上的deviceorientation和devicemotion事件,如下所示:
window.addEventListener('devicemotion', (event) => {...})
window.addEventListener('deviceorientation', (event) => {...})
Run Code Online (Sandbox Code Playgroud)
在某些设备/集成上,我没有传感器数据。我试图模仿“错误的”集成,尝试通过将以下内容添加到应用清单中来阻止WebView传感器访问,但是没有运气。JS事件仍然被触发:
<activity
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)
除了一起禁用JS之外,还有什么其他阻止WebView触发事件的可能方法?
更新:
一些见解:
问题最多的设备是:
更新2
我在某些设备上的IOS上有类似的问题,最有问题的是:
新三星Galaxy S4具有和有趣的新类型的手势称为"的空气手势 "使用红外传感器来处理在屏幕的前面的用户的手移动,加入了" 预接触 '/’ 接近 "事件,在至极手指在触摸之前检测到.
我想在我的一个应用程序中使用这个" 浮动触摸 "事件.我在谷歌和三星开发者中心都搜索过,但我找不到任何关于它的API或信息.
API可用还是太早?有人有任何链接/信息吗?
http://www.samsung.com/global/microsite/galaxys4/lifetask.html#page=airview

我希望能够编写代码,从加速度计获取信号来执行以下操作:
我对Android手机中的加速度计特别感兴趣,但我对各种关于从加速度计读取信号并使其有用的一般信息持开放态度.我听说过有关DSP的一些好读,但是,我真的很喜欢以代码为中心的资源.无论这些示例是什么编程语言,我都希望在代码中看到一些东西.任何人都可以建议适合该法案的东西吗?我也有兴趣在Android手机上利用其他传感器,但是,我主要是询问加速度计.
我使用以下代码为每个用户首选项设置方向锁定:
private void doLock(boolean locked) {
if (locked) {
int o = getResources().getConfiguration().orientation;
if (o == Configuration.ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if (o == Configuration.ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理,除了我处于解锁模式(SCREEN_ORIENTATION_SENSOR)的情况下屏幕显示LANDSCAPE正确(!),然后调用doLock(true)和...
而不是屏幕锁定到LANDSCAPE其当前(正确)横向视图,它锁定到倒置的横向视图.即同样精确但垂直翻转(y变为-y).
为什么这样,我如何处理这个问题才能解决它?
我的初步调查显示除了常见的两个(,)之外还有很多其他可能性,包括,但是我的预感告诉我这个问题可能取决于设备,所以通过使用它我可能只是为我的手机修复问题但不适用于所有其他设备.portraitlandscapereverseLandscape
有没有办法在所有设备中强制正确landscape定位(切换时sensor)?
为了使这更清晰,更容易重现,以下是显示问题的步骤:
SCREEN_ORIENTATION_SENSOR),屏幕显示LANDSCAPE正确(!),doLock(true)LANDSCAPE当前(正确)的横向视图中,而是锁定到倒置的横向视图.即同样精确但垂直翻转(y变为-y).我要求在Android中显示某些地方的列表ListView以及该地点的方向.我能够找到位置之间的角度,但问题是我的客户端需要在旋转或移动设备时旋转箭头.我没有找到任何按照传感器更改旋转箭头的解决方案.在这样的要求中做任何一个吗?请建议我一些解决方案,以便在此iPhone应用程序中显示列表.或者看下面的图像.
更新:
我期待任何答案,这将有助于启动以下要求.即使单独显示箭头也是受欢迎的,因此我将尽力实现以下目标.我所做的所有样品都在摇晃,它们不稳定.

我的要求是像Google maps apps罗盘模式一样(点击时可以看到演示current location button twice):
compass模式下,地图始终旋转一个角度,以便bluedot arrow始终指向顶部屏幕.但我不知道如何计算正确的bearing距离azimuth, pitch, roll值.
public void onSensorChanged(SensorEvent sensorEvent) {
switch (sensorEvent.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(sensorEvent.values, 0, mAccelerometers, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(sensorEvent.values, 0, mMagnetometers, 0, 3);
break;
default:
break;
}
float[] rotationMatrix = new float[9];
boolean success =
SensorManager.getRotationMatrix(rotationMatrix, null, mAccelerometers, mMagnetometers);
if (success) {
SensorManager.getOrientation(rotationMatrix, mOrientation);
float azimuth = Math.toDegrees(mOrientation[0]);
float pitch = Math.toDegrees(mOrientation[1]);
float roll = Math.toDegrees(mOrientation[2]);
} …Run Code Online (Sandbox Code Playgroud) android ×10
android-sensors ×10
electronics ×1
galaxy ×1
gesture ×1
google-maps ×1
gyroscope ×1
ios ×1
javascript ×1
location ×1
pressure ×1
sensor ×1
webview ×1