首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

组合重力感应器来计算手机移动的方位

2012-10-14 
结合重力感应器来计算手机移动的方位public void onSensorChanged( SensorEvent event ) {// If we dont

结合重力感应器来计算手机移动的方位

public void onSensorChanged( SensorEvent event ) {    // If we don't have a Location, we break out    if ( LocationObj == null ) return;    float azimuth = event.values[0];    float baseAzimuth = azimuth;    GeomagneticField geoField = new GeomagneticField( Double        .valueOf( LocationObj.getLatitude() ).floatValue(), Double        .valueOf( LocationObj.getLongitude() ).floatValue(),        Double.valueOf( LocationObj.getAltitude() ).floatValue(),        System.currentTimeMillis() );    azimuth -= geoField.getDeclination(); // converts magnetic north into true north    // Store the bearingTo in the bearTo variable    float bearTo = LocationObj.bearingTo( destinationObj );    // If the bearTo is smaller than 0, add 360 to get the rotation clockwise.    if (bearTo < 0) {        bearTo = bearTo + 360;    }    //This is where we choose to point it    float direction = bearTo - azimuth;    // If the direction is smaller than 0, add 360 to get the rotation clockwise.    if (direction < 0) {        direction = direction + 360;    }    rotateImageView( arrow, R.drawable.arrow, direction );    //Set the field    String bearingText = "N";    if ( (360 >= baseAzimuth && baseAzimuth >= 337.5) || (0 <= baseAzimuth && baseAzimuth <= 22.5) ) bearingText = "N";    else if (baseAzimuth > 22.5 && baseAzimuth < 67.5) bearingText = "NE";    else if (baseAzimuth >= 67.5 && baseAzimuth <= 112.5) bearingText = "E";    else if (baseAzimuth > 112.5 && baseAzimuth < 157.5) bearingText = "SE";    else if (baseAzimuth >= 157.5 && baseAzimuth <= 202.5) bearingText = "S";    else if (baseAzimuth > 202.5 && baseAzimuth < 247.5) bearingText = "SW";    else if (baseAzimuth >= 247.5 && baseAzimuth <= 292.5) bearingText = "W";    else if (baseAzimuth > 292.5 && baseAzimuth < 337.5) bearingText = "NW";    else bearingText = "?";    fieldBearing.setText(bearingText);}


PS,用这种方式,如果手机的方向和移动的方向不一致,那就会不准。

热点排行