Android手机加速度传感器和方向传感器的应用 加速度传感器的应用

之前做一个项目的时候需要获取手机在手机运动平面上(此平面与桌面可以任意角)的水平方向加速度ax,垂直方向加速度ay(ax,ay在运动平面上),手机与水平方向的倾角。

研究后发现,Sensor.TYPE_ACCELEROMETER获取的加速度实际上是手机运动的加速度与重力加速度的合加速度。

Sensor.TYPE_ORIENTATION获取的方向value[1]是手机坐标系y轴与桌面的夹角,value[2]是手机坐标系x轴与桌面的夹角。




具体推导见下图:



代码:

SenserListenerActivity.java:

package zhang.zhuoyueBei.Senser;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.hardware.SensorManager;
import android.hardware.SensorListener;
public class SenserListenerActivity extends Activity implementsSensorListener {
SensorManager sm = null;
TextView acx = null;
TextView acy = null;
TextView o = null;
double ax =0;
double ay =0;
double oy =0;
double oz =0;
doubleaxp=0;
doubleayp=0;
doubleg=10;
doublegp=0;

doubletmp1=0,tmp2=0,tmp3=0,tmp4=0;
publicdouble getAccelerationX()
{
return axp;
}
publicdouble getAccelerationY()
{
return ayp;
}
publicdouble getOrientation()
{

return Math.asin(tmp4)/Math.PI*180.0;
}

@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get reference to SensorManager
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
setContentView(R.layout.main);

acx = (TextView) findViewById(R.id.xbox);
acy = (TextView) findViewById(R.id.ybox);
o = (TextView) findViewById(R.id.obox);
}
Android手机加速度传感器和方向传感器的应用 加速度传感器的应用
public voidonSensorChanged(int sensor, float[] values) {
synchronized (this) {
if (sensor == SensorManager.SENSOR_ORIENTATION) {
oy=values[1];
oz=values[2];
}
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
ax=values[0];
ay=values[1];
}

tmp1=Math.sin(oz*Math.PI/180.0);
tmp2=Math.sin(Math.abs(oy)*Math.PI/180.0);
tmp3=Math.sqrt(tmp1*tmp1+tmp2*tmp2);
tmp4=tmp1/tmp3;



gp=10*tmp3;
axp=ax*Math.cos(tmp4)+ay*Math.sin(tmp4);
ayp=-ax*Math.sin(tmp4)+ay*Math.cos(tmp4)+gp;
acx.setText("a X: " + getAccelerationX());
acy.setText("a Y: " + getAccelerationY());
o.setText("Orientation : " + getOrientation());
}
}

public voidonAccuracyChanged(int sensor, int accuracy) {
}
@Override
protectedvoid onResume() {
super.onResume();
// register this class as a listener for the orientation andaccelerometer sensors
sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION|SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protectedvoid onStop() {
// unregister listener
sm.unregisterListener(this);
super.onStop();
}
}

main.xml:

<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Accelerometer"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="X Value"
android:id="@+id/xbox"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Y Value"
android:id="@+id/ybox"
/>

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Orientation"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="direction Value"
android:id="@+id/obox"
/>
</LinearLayout>

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/294432.html

更多阅读

如何辨别正版苹果手机与高仿精仿苹果手机 高仿和精仿的区别

? ??几种方式可以很快鉴定是否为山寨机:1.?你放在手机里移动或联通的sim卡是不是比一般正常的小,如果没有比较小,那就是山寨机了。2.摸摸手机的机身,正品苹果手机是玻璃钢材质,山寨机多为塑钢等材质。3.正品苹果用的是IPS的屏,分辨率较高,

手机3G卡与2G卡的区别 手机内存3g和2g区别

手机3G卡与2G卡的区别——简介3G手机卡与2G手机卡有什么不同,3G和2G的特点和区别又是什么呢?2G是第二代手机通信技术的简称,3G是第二代手机通信技术的简称。下面将总结一下:手机3G卡与2G卡的区别——工具/原料

什么是Android手机的工程模式? android进入工程模式

什么是Android手机的工程模式?——简介很多刚接触安卓手机不久的用户可能会在开机时不知道怎么回事就进入到一个全英文的画面,尝试了一些操作后发现手机会出现卡死,甚至是恢复出厂设置的情况,所以今天的视频就为大家简单介绍一下,安卓手

TF卡和SD卡的区别 手机tf卡和sd卡区别

TF卡和SD卡的区别——简介在我们的手机内存卡中经常提到TF卡和SD卡。我们很迷惑他们到底有什么区别吗。TF卡和SD卡的区别——工具/原料TF卡,SD卡TF卡和SD卡的区别——方法/步骤TF卡和SD卡的区别 1、一、SD卡是Secure Digital Card的

Android手机变砖后的自救方法 三星a7黑屏变砖自救

 对于经常刷机的Android机友来说,难免会运气不好碰到刷机失败损坏recovery程序导致手机无法启动的情况,也就是传说中的手机变砖块了。不过刷机失败手机变砖并不是世界末日,略施小计就可以让你的Android手机重新复活。   1·首先要

声明:《Android手机加速度传感器和方向传感器的应用 加速度传感器的应用》为网友素子花开分享!如侵犯到您的合法权益请联系我们删除