gpt4 book ai didi

android - 检测 Android 设备方向(不是屏幕方向)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:16 24 4
gpt4 key购买 nike

有没有办法检测 Android 设备的当前方向?

我不是在谈论屏幕方向,而是在谈论设备的物理握持方式。到目前为止我找到的所有解决方案都会告诉我屏幕方向(在我的应用程序中始终是纵向)。即使我没有旋转屏幕,我也需要知道用户是否水平握持设备。

谢谢。

最佳答案

您可以使用加速度计。要使用它,您需要在传感器上注册一个监听器 TYPE_ACCELEROMETER .

完成后,您将在该传感器的值发生变化时收到通知(通常是在用户手持设备时)。

从该传感器接收到的值是(代表矢量的)重力在 X、Y 和 Z 轴上的投影。 (好吧……这不完全正确:事实上,这些值代表了施加到设备上的所有力总和的投影)所以:

  • X 轴上的正值 (SensorEvent.values[0]) :表示设备的右边缘在左边缘之下。
  • Y 轴上的正值 (SensorEvent.values[1]) :表示上边缘在下边缘之下
  • Z 轴上的正值 (SensorEvent.values[2]):表示设备的正面如果面向地面,因此必须颠倒前面的 2 条规则。

这是示例代码(警告:它不关心 Z 轴上的值)

/**
* Logs the device orientation. Results are not valid when the screen is facing the ground.
* (when the discriminant value is low (i.e. device almost horizontal) : no logs)
*/
public void onSensorChanged(SensorEvent event) {
if (event.sensor == mAccelerometer) {
if(Math.abs(event.values[1]) > Math.abs(event.values[0])) {
//Mainly portrait
if (event.values[1] > 1) {
Log.d(TAG,"Portrait");
} else if (event.values[1] < -1) {
Log.d(TAG,"Inverse portrait");
}
}else{
//Mainly landscape
if (event.values[0] > 1) {
Log.d(TAG,"Landscape - right side up");
} else if (event.values[0] < -1) {
Log.d(TAG,"Landscape - left side up");
}
}
}
}

关于android - 检测 Android 设备方向(不是屏幕方向),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23805504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com