通過netty把百度地圖API獲取的地理位置從Android端發送到Java服務器端

本篇記錄我在實現時的思考過程,寫給之后可能遇到困難的我自己也給到需要幫助的人 。寫的比較淺顯,見諒 。
在寫項目代碼的時候,需要把Android端的位置信息傳輸到服務器端,通過Netty達到連續傳輸的效果,如下:

通過netty把百度地圖API獲取的地理位置從Android端發送到Java服務器端

文章插圖
我們可以先來看看百度地圖官方給出的相關代碼
public class MainActivity extends AppCompatActivity {private MapView mMapView = null;private BaiduMap mBaiduMap = null;private LocationClient mLocationClient = null;private TextView mtextView;// 是否是第一次定位private boolean isFirstLocate = true;// 當前定位模式private MyLocationConfiguration.LocationMode locationMode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);LocationClient.setAgreePrivacy(true);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mMapView = findViewById(R.id.bmapView);mtextView = findViewById(R.id.text_tishi);//開啟交通圖mBaiduMap = mMapView.getMap();mBaiduMap.setTrafficEnabled(true);//開啟地圖的定位圖層mBaiduMap.setMyLocationEnabled(true);//BaiduMapOptions options = new BaiduMapOptions();//options.mapType(BaiduMap.MAP_TYPE_SATELLITE);//MapView mapView = new MapView(this, options);//setContentView(mapView);衛星地圖view顯示//定位初始化LocationClient mLocationClient = null;try {mLocationClient = new LocationClient(MainActivity.this);} catch (Exception e) {e.printStackTrace();}//通過LocationClientOption設置LocationClient相關參數LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打開gpsoption.setCoorType("bd09ll"); // 設置坐標類型option.setScanSpan(1000);// 可?。?設置地址信息option.setIsNeedAddress(true);//可?。?設置是否需要地址描述option.setIsNeedLocationDescribe(true);//設置locationClientOptionmLocationClient.setLocOption(option);//注冊LocationListener監聽器MyLocationListene myLocationListener = new MyLocationListene();mLocationClient.registerLocationListener(myLocationListener);//開啟地圖定位圖層mLocationClient.start();}public class MyLocationListene extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 銷毀后不在處理新接收的位置if (location == null || mMapView == null) {return;}LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());if (isFirstLocate) {isFirstLocate = false;//給地圖設置狀態mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(ll));}MyLocationData locData = https://www.huyubaike.com/biancheng/new MyLocationData.Builder().accuracy(location.getRadius())// 此處設置開發者獲取到的方向信息,順時針0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);// 更換定位圖標 , 這里的圖片是放在 drawble 文件下的BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);// 定位模式 地圖SDK支持三種定位模式:NORMAL(普通態), FOLLOWING(跟隨態), COMPASS(羅盤態)locationMode = MyLocationConfiguration.LocationMode.NORMAL;// 定位模式、是否開啟方向、設置自定義定位圖標、精度圈填充顏色以及精度圈邊框顏色5個屬性(此處只設置了前三個) 。MyLocationConfiguration mLocationConfiguration = new MyLocationConfiguration(locationMode,true,mCurrentMarker);// 使自定義的配置生效mBaiduMap.setMyLocationConfiguration(mLocationConfiguration);// 顯示當前信息StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("\n經度:" + location.getLatitude());stringBuilder.append("\n緯度:"+ location.getLongitude());stringBuilder.append("\n狀態碼:"+ location.getLocType());stringBuilder.append("\n國家:" + location.getCountry());stringBuilder.append("\n城市:"+ location.getCity());stringBuilder.append("\n區:" + location.getDistrict());stringBuilder.append("\n街道:" + location.getStreet());stringBuilder.append("\n地址:" + location.getAddrStr());mtextView.setText(stringBuilder.toString());}}}使用者需要創建一個LocationClient對象,為LocationClient配置Option、注冊監聽器(BDAbstractLocationListener)來獲取位置信息 , 監聽器得到的BDLocation對象中含有需要的位置信息,我們需要把他取出 。
在思考階段,我想直接把Listener中的BDLocation對象直接取出,把BDLocation對象變成String類型通過Netty傳輸至服務端 , 過程如下:
通過netty把百度地圖API獲取的地理位置從Android端發送到Java服務器端

文章插圖
但是想法很美好,顯示很殘酷,BDAbstractLocationListener并不允許我們這么做/(ㄒoㄒ)/~~

推薦閱讀