您的位置:首页 > 移动开发 > Android开发

Android定位

2015-09-19 09:50 387 查看
1.网络定位
ip地址定位,(让ip地址和实际地址形成一个数据库)
缺点:因为ip地址是动态分配的,会导致定位不准确

2.基站定位
在每个地区都用,保证手机有信号,就可以定位到自己,其范围是几百米到几公里不等
缺点:受地区限制,定位不准确

3.GPS .卫星定位
目前大多数手机都拥有的Gps定位,就是卫星定位(美国卫星),中国有的定位系统是北斗星定位。
卫星定位至少需要3颗卫星,GPS的定位用了24颗卫星。覆盖了90%区域。
目前非常的流行,原因是定位准确,并且只要我们的智能手机有电,不用网络也是可以定位的(效果其实有影响)
缺点:受云层,建筑等干扰
4.A-GPS辅助定位GPS,通过,网络和GPS共同定位,,一般Android手机都是这种定位。

用一个简单的例子说明定位:
import java.util.List;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

private LocationManager lm;
private LocationListener listener;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
// 获取手机所有的定位方式
List<String> allProviders = lm.getAllProviders();
listener = new LocationListener() {
/**
* 位置发生变化
*/
@Override
public void onLocationChanged(Location location) {
String j = "经度:" + location.getLongitude();
String w = "维度:" + location.getLatitude();
String accuracy = "精确度"+location.getAccuracy();
String altitude = "海拔"+location.getAltitude();
System.out.println("j:===="+j+"w:===="+w+"10"+accuracy+"sasa"+altitude);

}

/**
* 状态发生变化
*/
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}

};

//第一个参数是指以什么作为定位提供者(我选择的是GPS定位),
// 最短更新时间
// 最短更新距离
// 定位的监听
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,// 这里我用的是时时更新
listener);
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//可以去除监听
lm.removeUpdates(listener);
}

}

// 获取最佳的位置提供者
Criteria criteria = new Criteria();
criteria.setCostAllowed(true);// 是否允许付费(4G网络定位就是要付费的)
criteria.setAccuracy(Criteria.ACCURACY_FINE);// 精确度一般就好,越高越耗电

String bestProvider = lm.getBestProvider(criteria, true);

经度: longitude  -180~180
纬度: latitude  -90~90

经度的起点为本初子午线,规定以过伦敦格林威治天文台的那条经线为0度经线,即本初子午线。

--Zero
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: