在開發應用中我們經常使用定位功能,最近也寫了一個關於定位的Demo,有三種方式可以實現定位,分別是基站定位, 網絡定位, GPS定位。
方式一:基站定位 (passive),精確度 幾十米到幾千米不等。 在市區推薦使用基站定位。
方式二:Wifi定位,網絡定位。
運營商下放IP地址。比如彩虹QQ。
google縱橫(統計一個非常大的IP和地址映射關係)
動態IP(IP池中隨機獲取一個IP地址,每次聯網都會去池中獲取一個隨機的IP ,得到的是一個大體的地址),比如新浪微博。天氣定位
方式三:GPS定位
與衛星進行通信。
手機中嵌入了GPS模塊(精簡版的A-GPS),通過A-GPS搜索衛星, 獲取經緯度。
使用GPS的弊端是:必須站在空曠的地方,頭頂對着天空,如果雲層厚了,也會受到一定的影響。
精確度:10-50米
[微信位置助手]
//必須添加權限
< uses-permission android:name= " android.permission.ACCESS_FINE_LOCATION " /> //精確定位
<uses-permission android:name= "android.permission.ACCESS_MOCK_LOCATION" /> //模擬器
<uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION" /> //粗糙定位
//獲取定位管理對象
LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);
String[] names=lm.getAllProviders();//獲取所有的位置提供者,一般三種
Criteria criteria=new Criteria();//查詢條件,如果設置了海拔,則定位方式只能是GPS;
criteria.setCostAllowed(true);//是否產生開銷,比如流量費
String provider=lm.getBaseProvider(criteria,true)//獲取最好的位置提供者,第二個參數爲true,表示只獲取那些被打開的位置提供者
lm.requestLocationUpdates(provier,0,0,new LocationListener(){});//獲取位置。第二個參數表示每隔多少時間返回一次數據,第三個參數表示被定位的物體移動每次多少米返回一次數據。
private class MyLocationListener implements LocationListener {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
System. out.println( "服務中位置監聽發送了變化了" );
float accuracy = location.getAccuracy(); // 精確度
double altitude = location.getAltitude(); // 海拔
double latitude = location.getLatitude(); // 緯度
double longitude = location.getLongitude(); // 經度
String locationInfo = "jingdu:" + longitude + ",weidu:" + latitude + ",haiba:" + altitude + ",jingquedu:" + accuracy;
Editor edit = sp.edit();
edit.putString( "location", locationInfo);
edit.commit();
}
}