android虚拟定位原理

android虚拟定位原理,第1张

Android虚拟定位是一种技术,它使用一组精确的传感器,比如GPS、WiFi、蓝牙、视觉等,来替代硬件GPS定位,从而获得准确的定位信息。Android虚拟定位的原理是,通过传感器获取用户手机的定位信息,然后将这些信息发送到服务器上,服务器将这些定位信息与地图、POI(兴趣点)和其他信息进行比较,并将最终的定位结果返回给用户。

Android虚拟定位的优势在于,它可以取代硬件GPS定位,更加准确、可靠,而且能够支持更多的室内定位,这对于室内定位十分有用。另外,Android虚拟定位也可以提供更多的定位服务,比如,实时路况信息等,可以更好地满足用户的定位需求。

有相应的编程接口。了解一下基本的安卓编程就知道了。

各种游戏 APP能使用重力数据 就是调取了相应的数据。

参考:

import javautilList;

import androidappActivity;

import androidhardwareSensor;

import androidhardwareSensorEvent;

import androidhardwareSensorEventListener;

import androidhardwareSensorManager;

import androidosBundle;

import androidviewView;

import androidwidgetButton;

import androidwidgetTextView;

public class SensorGetValueActivity extends Activity implements SensorEventListener{

private SensorManager sensorManager;

/ Called when the activity is first created /

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

sensorManager=(SensorManager)thisgetSystemService(SENSOR_SERVICE);

setContentView(Rlayoutmain);

Button close=(Button)findViewById(Ridbtn_close);

closesetOnClickListener(new ButtonOnClickListener(){

public void onClick(View v) {

// TODO Auto-generated method stub

finish();

}

});

}

protected void onResume(){

superonResume();

List<Sensor> sensors=sensorManagergetSensorList(SensorTYPE_ALL);

for(Sensor s:sensors){

sensorManagerregisterListener(this, s,SensorManagerSENSOR_DELAY_NORMAL);

}

// sensorManagerregisterListener(this, sensorManagergetDefaultSensor(SensorTYPE_ACCELEROMETER),

// SensorManagerSENSOR_DELAY_NORMAL);

}

public void onAccuracyChanged(Sensor arg0, int arg1) {

// TODO Auto-generated method stub

}

public void onSensorChanged(SensorEvent event) {

// TODO Auto-generated method stub

switch(eventsensorgetType()){

//加速度

case SensorTYPE_ACCELEROMETER:

TextView tv1=(TextView)findViewById(Ridtv1);

String x1=StringvalueOf(eventvalues[SensorManagerDATA_X]);

String y1=StringvalueOf(eventvalues[SensorManagerDATA_Y]);

String z1=StringvalueOf(eventvalues[SensorManagerDATA_Z]);

tv1setText("加速度x:"+x1+"\n"+"加速度y:"+y1+"\n"+"加速度z:"+z1);

break;

//倾斜度

case SensorTYPE_ORIENTATION:

TextView tv2=(TextView)findViewById(Ridtv2);

String x2=StringvalueOf(eventvalues[SensorManagerDATA_X]);

String y2=StringvalueOf(eventvalues[SensorManagerDATA_Y]);

String z2=StringvalueOf(eventvalues[SensorManagerDATA_Z]);

tv2setText("倾斜度x:"+x2+"\n"+"倾斜度y:"+y2+"\n"+"倾斜度z:"+z2);

break;

//磁力计

case SensorTYPE_MAGNETIC_FIELD:

TextView tv3=(TextView)findViewById(Ridtv3);

String x3=StringvalueOf(eventvalues[SensorManagerDATA_X]);

String y3=StringvalueOf(eventvalues[SensorManagerDATA_Y]);

String z3=StringvalueOf(eventvalues[SensorManagerDATA_Z]);

tv3setText("磁力计x:"+x3+"\n"+"磁力计y:"+y3+"\n"+"磁力计z:"+z3);

break;

//温度

case SensorTYPE_TEMPERATURE:

TextView tv4=(TextView)findViewById(Ridtv4);

String c=StringvalueOf(eventvalues[SensorManagerDATA_X]);

tv4setText("Degree:"+c);

break;

}

}

protected void onStop(){

superonStop();

sensorManagerunregisterListener(this);

}

}

public class MainActivity extends Activity implements SensorEventListener {

private static final String TAG = MainActivityclassgetSimpleName();

private SensorManager mSensorManager;

private Sensor mSensor;

private TextView textviewX;

private TextView textviewY;

private TextView textviewZ;

private TextView textviewF;

private int mX, mY, mZ;

private long lasttimestamp = 0;

Calendar mCalendar;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

textviewX = (TextView) findViewById(RidtextView1);

textviewY = (TextView) findViewById(RidtextView3);

textviewZ = (TextView) findViewById(RidtextView4);

textviewF = (TextView) findViewById(RidtextView2);

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

mSensor = mSensorManagergetDefaultSensor(SensorTYPE_ACCELEROMETER);// TYPE_GRAVITY

if (null == mSensorManager) {

Logd(TAG, "deveice not support SensorManager");

}

// 参数三,检测的精准度

mSensorManagerregisterListener(this, mSensor,

SensorManagerSENSOR_DELAY_NORMAL);// SENSOR_DELAY_GAME

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override

public void onSensorChanged(SensorEvent event) {

if (eventsensor == null) {

return;

}

if (eventsensorgetType() == SensorTYPE_ACCELEROMETER) {

int x = (int) eventvalues[0];

int y = (int) eventvalues[1];

int z = (int) eventvalues[2];

mCalendar = CalendargetInstance();

long stamp = mCalendargetTimeInMillis() / 1000l;// 1393844912

textviewXsetText(StringvalueOf(x));

textviewYsetText(StringvalueOf(y));

textviewZsetText(StringvalueOf(z));

int second = mCalendarget(CalendarSECOND);// 53

int px = Mathabs(mX - x);

int py = Mathabs(mY - y);

int pz = Mathabs(mZ - z);

Logd(TAG, "pX:" + px + " pY:" + py + " pZ:" + pz + " stamp:"

+ stamp + " second:" + second);

int maxvalue = getMaxValue(px, py, pz);

if (maxvalue > 2 && (stamp - lasttimestamp) > 30) {

lasttimestamp = stamp;

Logd(TAG, " sensor isMoveorchanged");

textviewFsetText("检测手机在移动");

}

mX = x;

mY = y;

mZ = z;

}

}

/

获取一个最大值

@param px

@param py

@param pz

@return

/

public int getMaxValue(int px, int py, int pz) {

int max = 0;

if (px > py && px > pz) {

max = px;

} else if (py > px && py > pz) {

max = py;

} else if (pz > px && pz > py) {

max = pz;

}

return max;

}

}

方向传感器和加速度传感器主要用于游戏,电磁场传感器这个很少见啊,因该是用来确定方位信息的,比如GPS,至于温度传感器是用于监测电池和CPU温度的软件你到豆荚或91熊猫去下找系统软件。

以上就是关于android虚拟定位原理全部的内容,包括:android虚拟定位原理、怎么把安卓系统中的重力传感器的数据读出来、如何在android studio 上用加速度传感器来得到x y z轴上的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9430873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存