需求背景:
手機(jī)的wifi連上了物聯(lián)網(wǎng)設(shè)備,只能通信,沒有網(wǎng)絡(luò)數(shù)據(jù)。在這個前提下需要獲得手機(jī)的經(jīng)緯度。
解決辦法:
1.嘗試使用百度地圖并且網(wǎng)絡(luò)請求綁定為移動網(wǎng)絡(luò)。結(jié)果:由于百度把網(wǎng)絡(luò)請求的邏輯封裝起來了,
沒有辦法進(jìn)行綁定操作,失?。。?!
2.嘗試通過跨進(jìn)程通信,開啟一個新的進(jìn)程專門用來進(jìn)行定位請求,由于綁定移動網(wǎng)絡(luò)到該進(jìn)程時沒有生效,所以也失敗了??!
3.使用Android的GPS定位,沒有網(wǎng)絡(luò)也可以獲取經(jīng)緯度。贊一個!只不過在室內(nèi)GPS基本不可行,這個是個弱點。
開發(fā)的思路:
作者的一點小建議:1.在百度這個的時候,看了很多人的分享,有很多是為了寫這個而寫的,也就是寫給自己看的,所以看起來不是很清晰明了,這種要避免掉,不要因為這些而看了沒耐心。2.看代碼要看他的中心,有可能100行代碼只有10行是中心,這個要學(xué)習(xí)觀察,最好梳理一下流程,就像本文的GPS定位一樣,最好梳理一下步驟。下面是我梳理的步驟。
實踐步驟:
1.首先聲明LocationManager變量,如下:
private LocationManager?? lm;
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
2.使用GPS定位,是通過將上面的lm的Provider設(shè)置LocationManager.GPS_PROVIDER。當(dāng)然要在GPS打開的時候才能設(shè)置,否則不行,那么我們先做一個判斷:
lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
表示GPS是否可用。
3.可用的話,可以設(shè)置lm的定位周期,如下
//設(shè)置定位的周期(含義:使用GPS,變化為1秒,1米更新一次)
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,1,locationListener);
//順便把LocationListener給寫了,這個使用監(jiān)聽位置信息改變的類。
private LocationListenerlocationListener =new LocationListener() {
@Override
? ? public void onLocationChanged(Location location) {
Toast.makeText(GpsActivity.this,"位置信息正在變化,經(jīng)緯度:" + location.getLongitude() +"/" +
location.getLatitude(), Toast.LENGTH_LONG).show();
}
@Override
? ? public void onStatusChanged(String provider,int status, Bundle extras) {
}
@Override
? ? public void onProviderEnabled(String provider) {
}
@Override
? ? public void onProviderDisabled(String provider) {
Toast.makeText(GpsActivity.this,"定位不可用!", Toast.LENGTH_LONG).show();
}
};
4.可以獲取最新的位置信息
//獲取最新的定位信息
Location location=lm.getLastKnownLocation(locationProvider);
到這里就差不多了。