1.有關高德開放平臺的審覈工作
2.項目配置
首先,聲明Service組件
1
|
<service
android:name= "com.amap.api.location.APSService" ></service> |
然後,聲明權限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<!--用於進行網絡定位--> <uses-permission
android:name= "android.permission.ACCESS_COARSE_LOCATION" ></uses-permission> <!--用於訪問GPS定位--> <uses-permission
android:name= "android.permission.ACCESS_FINE_LOCATION" ></uses-permission> <!--用於獲取運營商信息,用於支持提供運營商信息相關的接口--> <uses-permission
android:name= "android.permission.ACCESS_NETWORK_STATE" ></uses-permission> <!--用於訪問wifi網絡信息,wifi信息會用於進行網絡定位--> <uses-permission
android:name= "android.permission.ACCESS_WIFI_STATE" ></uses-permission> <!--用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission
android:name= "android.permission.CHANGE_WIFI_STATE" ></uses-permission> <!--用於訪問網絡,網絡定位需要上網--> <uses-permission
android:name= "android.permission.INTERNET" ></uses-permission> <!--用於讀取手機當前的狀態--> <uses-permission
android:name= "android.permission.READ_PHONE_STATE" ></uses-permission> <!--用於寫入緩存數據到擴展存儲卡--> <uses-permission
android:name= "android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission> <!--用於申請調用A-GPS模塊--> <uses-permission
android:name= "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" ></uses-permission> <!--用於申請獲取藍牙信息進行室內定位--> <uses-permission
android:name= "android.permission.BLUETOOTH" ></uses-permission> <uses-permission
android:name= "android.permission.BLUETOOTH_ADMIN" ></uses-permission> |
接下來需要在org.cocos2dx.lua.AppActivity裏面添加初始代碼(由於這是一個獲取位置的小Demo,目前只有滿足需求的部分代碼,後續增加功能的話,其餘功能代碼會陸續加上來)
選擇定位模式
1
2
|
//設置定位模式爲AMapLocationMode.Hight_Accuracy,高精度模式。 mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); |
1
2
|
//設置定位模式爲AMapLocationMode.Battery_Saving,低功耗模式。 mLocationOption.setLocationMode(AMapLocationMode.Battery_Saving); |
1
2
|
//設置定位模式爲AMapLocationMode.Device_Sensors,僅設備模式。 mLocationOption.setLocationMode(AMapLocationMode.Device_Sensors); |
設置單次定位
1
2
3
4
5
6
7
8
9
|
//獲取一次定位結果: //該方法默認爲false。 mLocationOption.setOnceLocation( true ); //獲取最近3s內精度最高的一次定位結果: //設置setOnceLocationLatest(boolean
b)接口爲true,啓動定位時SDK會返回最近3s內精度最高的一次定位結果。如果設置其爲true,setOnceLocation(boolean b)接口也會被設置爲true,反之不會,默認爲false。 mLocationOption.setOnceLocationLatest( true ); } |
自定義連續定位
1
2
|
//設置定位間隔,單位毫秒,默認爲2000ms,最低1000ms。 mLocationOption.setInterval( 1000 ); |
其他參數
1
2
|
//設置是否返回地址信息(默認返回地址信息) mLocationOption.setNeedAddress( true ); |
1
2
|
//設置是否強制刷新WIFI,默認爲true,強制刷新。 mLocationOption.setWifiActiveScan( false ); |
1
2
|
//設置是否允許模擬位置,默認爲false,不允許模擬位置 mLocationOption.setMockEnable( false ); |
1
2
|
//單位是毫秒,默認30000毫秒,建議超時時間不要低於8000毫秒。 mLocationOption.setHttpTimeOut( 20000 ); |
1
2
|
//關閉緩存機制 mLocationOption.setLocationCacheEnable( false ); |
啓動定位
1
2
3
4
|
//給定位客戶端對象設置定位參數 mLocationClient.setLocationOption(mLocationOption); //啓動定位 mLocationClient.startLocation(); |
獲取定位結果
實現監聽器
1
2
3
4
5
6
7
8
|
//可以通過類implement方式實現AMapLocationListener接口,也可以通過創造接口類對象的方法實現 //以下爲後者的舉例: AMapLocationListener
mAMapLocationListener = new AMapLocationListener(){ @Override public void
onLocationChanged(AMapLocation amapLocation) { } } |
解析AMapLocation對象
1
2
3
4
5
6
7
8
9
10
|
if (amapLocation
!= null )
{ if (amapLocation.getErrorCode()
== 0 )
{ //可在其中解析amapLocation獲取相應內容。 } else { //定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因,errInfo是錯誤信息,詳見錯誤碼錶。 Log.e( "AmapError" , "location
Error, ErrCode:" +
amapLocation.getErrorCode() + ",
errInfo:" +
amapLocation.getErrorInfo()); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
amapLocation.getLocationType(); //獲取當前定位結果來源,如網絡定位結果,詳見定位類型表 amapLocation.getLatitude(); //獲取緯度 amapLocation.getLongitude(); //獲取經度 amapLocation.getAccuracy(); //獲取精度信息 amapLocation.getAddress(); //地址,如果option中設置isNeedAddress爲false,則沒有此結果,網絡定位結果中會有地址信息,GPS定位不返回地址信息。 amapLocation.getCountry(); //國家信息 amapLocation.getProvince(); //省信息 amapLocation.getCity(); //城市信息 amapLocation.getDistrict(); //城區信息 amapLocation.getStreet(); //街道信息 amapLocation.getStreetNum(); //街道門牌號信息 amapLocation.getCityCode(); //城市編碼 amapLocation.getAdCode(); //地區編碼 amapLocation.getAoiName(); //獲取當前定位點的AOI信息 amapLocation.getBuildingId(); //獲取當前室內定位的建築物Id amapLocation.getFloor(); //獲取當前室內定位的樓層 amapLocation.getGpsStatus(); //獲取GPS的當前狀態 //獲取定位時間 SimpleDateFormat
df = new SimpleDateFormat( "yyyy-MM-dd
HH:mm:ss" ); Date
date = new Date(amapLocation.getTime()); df.format(date); |
最後一步,停止定位
停止定位
1
|
mLocationClient.stopLocation(); //停止定位後,本地定位服務並不會被銷燬 |
銷燬定位客戶端
1
|
mLocationClient.onDestroy(); //銷燬定位客戶端,同時銷燬本地定位服務。 |