Android定位基礎

          在開發應用中我們經常使用定位功能,最近也寫了一個關於定位的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();

            }

      }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章