關於android上的定位

來源:互聯網
上載者:User

最近在做定位相關的東西,把知識整理一下並分享出來。

1.定位有三種,網路,基站,GPS

2.不管哪種定位核心是要取得經緯度,你知道了經緯度要換算成具體地理位置的方法是有很多種的

以下分別講述三種的實現:

◆GPS

比較簡單

    public String mac;    TextView msg;    LocationManager locationManager;    LocationListener locationListener;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        msg = (TextView) findViewById(R.id.text);        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);        // 定義對位置變化的監聽函數        locationListener = new LocationListener() {            public void onLocationChanged(Location location) {                msg.setText("onLocationChanged" + location.getLatitude() + ",,"                        + location.getLongitude());                Log.e("onLocationChanged", location.getLatitude() + ",,"                        + location.getLongitude());            }            public void onStatusChanged(String provider, int status,                    Bundle extras) {            }            public void onProviderEnabled(String provider) {            }            public void onProviderDisabled(String provider) {            }        };        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,                0, locationListener);    }

關於GPS需要注意的地方就是首先你手機定位設定那裡要開啟GPS,還有manifest.xml中相關的許可權要寫進去(一搜一大把,不贅述),最後記得在戶外測試,室內是測試不到GPS的。

◆基站

這一塊你要自己實現也是可以的,不過複雜程度遠比你想的要多一些。要擷取基站資訊可以使用Android內建的API,這很簡單如以下代碼

    private void getCellInfo() throws Exception {        /** 調用API擷取基站資訊 */        TelephonyManager mTelNet = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);        GsmCellLocation location = (GsmCellLocation) mTelNet.getCellLocation();        if (location == null)            throw new Exception("擷取基站資訊失敗");        String operator = mTelNet.getNetworkOperator();        Log.e("基站資訊", operator);        String mcc = operator.substring(0, 3);        String mnc = operator.substring(3,5);        int cid = location.getCid();        int lac = location.getLac();        Log.e("具體基站資訊", "mcc=" + mcc + ",mnc=" + mnc + ",lac=" + lac + ",cid="                + cid);    }

 

但是你要吧基站資訊轉為經緯度就比較麻煩了,這裡當然最權威的是google了,網路上也找過一些其他的免費網站,很顯然不靠譜,我相信你搜出過這樣的API介面http://www.google.com/loc/json,我很負責任的告訴你,這個介面用不了,現在停用了,如果你研究了半天,一直在想post過去的資料為什麼不行,然後發現原來是這個API停用了,那我覺得你現在看到我這篇文章是幸福的,所以還是用google把,下面進入此網站https://developers.google.com/maps/documentation/business/geolocation/這裡面就有我們需要的資訊,我找了很久,google maps各種相關的API都找過了,這裡有我們需要的通過基站資訊得到經緯度的API,不過它是基於商業的,測試每天100次上限,發布後應該要用收費的,具體費用沒查了。不要覺得這個很容易,我相信你花了半天在測試的時候會發現更多衍生出來的問題。而且需要有英語閱讀能力,對於大部分人來說門檻過高了,建議略過。因為基站實際情況下並不太好用,比如手機沒SIM卡和平板的情況下,是用不了基站的。

◆網路

最建議大家使用的還是網路定位,因為網路實在太普遍的,行動裝置現在基本都能上網,當然我這說的是wifi情況下的。3G的沒條件測試過,這裡請不要使用android內建的API,如

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,                0, locationListener);

因為國內大部分手機被閹割過了,你運氣好的話,也許能擷取到資料,如果運氣不好,搞了半天你發現是手機系統被閹割後的問題,我想你可能會抓狂的。所以網路定位我們不能依賴Android API了。這裡就推薦一下百度定位把,我測試了下,速度蠻好,也還准。地址如下http://developer.baidu.com/map/sdk-android.htm。然後

看一下裡面的simple中的MyLocation類,簡單明了,快速解決問題。不過國外沒測試過,不知道百度能不能用在國外了。當然google maps中android版SDK應該也有相應的功能,不過有點繁瑣了,比如你只定位國內的話,相信百度可以了,如果是國際上,那google永遠是你的首選

完結!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.