編輯:Android開發教程
大家去網上搜索Android定位location為null沒法定位問題,估計有一大堆文章介紹如何來解決,但是最後大家發現基本沒用。本文將從Android定位實現原理來深入分析沒法定位原因並提出真正的解決方案。在分析之前,我們肯定得先看看android官方提供的定位SDK。
默認Android GPS定位實例
獲取LocationManager:
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
選擇Location Provider:
Android系統存在多種provider,分別是
GPS_PROVIDER:
這個就是手機裡有GPS芯片,然後利用該芯片就能利用衛星獲得自己的位置信息。但是在室內,GPS定位基本沒用,很難定位的到。
NETWORK_PROVIDER:
這個就是利用網絡定位,通常是利用手機基站和WIFI節點的地址來大致定位位置,
這種定位方式取決於服務器,即取決於將基站或WIF節點信息翻譯成位置信息的服務器的能力。由於目前大部分Android手機沒有安裝google官方的location manager庫,大陸網絡也不允許,即沒有服務器來做這個事情,自然該方法基本上沒法實現定位。
PASSIVE_PROVIDER:
被動定位方式,這個意思也比較明顯,就是用現成的,當其他應用使用定位更新了定位信息,系統會保存下來,該應用接收到消息後直接讀取就可以了。比如如果系統中已經安裝了百度地圖,高德地圖(室內可以實現精確定位),你只要使用它們定位過後,再使用這種方法在你的程序肯定是可以拿到比較精確的定位信息。
用戶可以直接指定某一個provider
String provider = mLocationManager.getProvider(LocationManager.GPS_PROVIDER);
也可以提供配置,由系統根據用戶的配置為用戶選擇一個最接近用戶需求的provider
Criteria crite = new Criteria(); crite.setAccuracy(Crite.ACCURACY_FINE); //精度 crite.setPowerRequirement(Crite.POWER_LOW); //功耗類型選擇 String provider = mLocationManager.getBestProvider(crite, true);
獲取Location
Location location = mLocationManager.getLocation(provider);
然後你會發現,這個返回的location永遠為null,你自然沒法定位。然後網上到處是咨詢為啥獲得的location為null,同樣網絡到處是解決這個問題的所謂解決方案。
所謂解決方案
網上有人說,一開始location是很有可能是null的,這是因為程序還從來沒有請求 過,只需重新請求更新location,並注冊監聽器以接收更新後的location信息。
LocationListener locationListener = new 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) { longitude = location.getLongitude(); latitude = location.getLatitude(); Log.d(TAG,"Location longitude:"+ longitude +" latitude: "+ latitude ); } }; mLocationManager.requestLocationUpdates(serviceProvider, 10000, 1, this);
然後你發現onLocationChanged永遠不會被調用,你仍然沒法獲取定位信息。
博主在大學裡學的專業就是軟件開發與游戲設計,所以對於游戲這個行業一直都有著濃厚的興趣,卻因為 陰差陽錯,又或許是緣分不夠吧。一直都沒有真正的進入到這個行業裡來,但對於游戲
先明確幾個概念的區別:padding margin:都是邊距的含義,關鍵問題得明白是什麼相對什麼的邊距padding:是 控件的內容相對控件的邊緣的邊距.margin &
推送並不是什麼新技術,這種技術在互聯網時代就已經很流行了。只是隨著進入移動互聯網時代,推送技術顯得更加重要。因為在智能手機中,推送從某種程度上,可以取代使用多年的短信,而
Gallery組件主要用於橫向顯示圖像列表,不過按常規做法。Gallery組件只能有限地顯示指定的圖像。也就是說,如果為Gallery組件指定了10張圖像,那麼當Gall