到jar包 https://yunpan.cn/cBs53gmzv4QPy 訪問密碼 8ba1android
配置文件git
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="本身根據包名申請" /> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
權限api
<!-- 百度權限 -->
<!-- 這個權限用於進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 這個權限用於訪問GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 獲取運營商信息,用於支持提供運營商信息相關的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 用於讀取手機當前的狀態 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 寫入擴展存儲,向擴展卡寫入數據,用於寫入離線定位數據 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 訪問網絡,網絡定位須要上網 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡讀取權限,用戶寫入離線定位數據 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
在mai中創建jniLibs文件夾網絡
map_location = (TextView) findViewById(R.id.map_location);
mapview = (MapView) findViewById(R.id.mapview);
private void setbaidu() { mBaiduMap = mapview.getMap(); mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); mBaiduMap.setTrafficEnabled(true); mLocationClient = new LocationClient(getApplicationContext()); BDLocationListener b = new BDLocationListener() { public void onReceiveLocation(BDLocation location) { //Receive Location StringBuffer sb = new StringBuffer(256); sb.append("time : "); sb.append(location.getTime()); sb.append("\nerror code : "); sb.append(location.getLocType()); sb.append("\nlatitude : "); sb.append(location.getLatitude()); sb.append("\nlontitude : "); sb.append(location.getLongitude()); sb.append("\nradius : "); sb.append(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位結果 sb.append("\nspeed : "); sb.append(location.getSpeed());// 單位:千米每小時 sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); sb.append("\nheight : "); sb.append(location.getAltitude());// 單位:米 sb.append("\ndirection : "); sb.append(location.getDirection());// 單位度 sb.append("\naddr : "); sb.append(location.getAddrStr()); sb.append("\ndescribe : "); sb.append("gps定位成功"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 網絡定位結果 sb.append("\naddr : "); sb.append(location.getAddrStr()); //運營商信息 sb.append("\noperationers : "); sb.append(location.getOperators()); sb.append("\ndescribe : "); sb.append("網絡定位成功"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結果 sb.append("\ndescribe : "); sb.append("離線定位成功,離線定位結果也是有效的"); } else if (location.getLocType() == BDLocation.TypeServerError) { sb.append("\ndescribe : "); sb.append("服務端網絡定位失敗,能夠反饋IMEI號和大致定位時間到loc-bugs@baidu.com,會有人追查緣由"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { sb.append("\ndescribe : "); sb.append("網絡不一樣致使定位失敗,請檢查網絡是否通暢"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { sb.append("\ndescribe : "); sb.append("沒法獲取有效定位依據致使定位失敗,通常是因爲手機的緣由,處於飛行模式下通常會形成這種結果,能夠試着重啓手機"); } sb.append("\nlocationdescribe : "); sb.append(location.getLocationDescribe());// 位置語義化信息 List<Poi> list = location.getPoiList();// POI數據 if (list != null) { sb.append("\npoilist size = : "); sb.append(list.size()); for (Poi p : list) { sb.append("\npoi= : "); sb.append(p.getId() + " " + p.getName() + " " + p.getRank()); } } Log.i("BaiduLocationApiDem", sb.toString()); String dizhi = location.getAddrStr(); System.out.println(dizhi + "========="); map_location.setText("我在" + dizhi); //檢查覆蓋物是否存在,存在則修改,不然則添加 // location.getLatitude(); // location.getLongitude(); //定義Maker座標點 LatLng point = new LatLng( location.getLatitude(), location.getLongitude()); //構建Marker圖標 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_gcoding); //構建MarkerOption,用於在地圖上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap); //在地圖上添加Marker,並顯示 mBaiduMap.addOverlay(option); } }; mLocationClient.registerLocationListener(b); // 註冊監聽函數 initLocation(); mLocationClient.start(); }
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
option.setCoorType("bd09ll");// 可選,默認gcj02,設置返回的定位結果座標系
int span = 1000;
option.setScanSpan(span);// 可選,默認0,即僅定位一次,設置發起定位請求的間隔須要大於等於1000ms纔是有效的
option.setIsNeedAddress(true);// 可選,設置是否須要地址信息,默認不須要
option.setOpenGps(true);// 可選,默認false,設置是否使用gps
option.setLocationNotify(true);// 可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果
option.setIsNeedLocationDescribe(true);// 可選,默認false,設置是否須要位置語義化結果,能夠在BDLocation.getLocationDescribe裏獲得,結果相似於「在北京天安門附近」
option.setIsNeedLocationPoiList(true);// 可選,默認false,設置是否須要POI結果,能夠在BDLocation.getPoiList裏獲得
option.setIgnoreKillProcess(false);// 可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死
option.SetIgnoreCacheException(false);// 可選,默認false,設置是否收集CRASH信息,默認收集
option.setEnableSimulateGps(false);// 可選,默認false,設置是否須要過濾gps仿真結果,默認須要
mLocationClient.setLocOption(option);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理
mapview.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理
mapview.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理
mapview.onPause();
}
private void setbaidu() {
mBaiduMap = mapview.getMap();
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
mBaiduMap.setTrafficEnabled(true);
mLocationClient = new LocationClient(getApplicationContext());
BDLocationListener b = new BDLocationListener() {
public void onReceiveLocation(BDLocation location) {
//Receive Location
StringBuffer sb = new StringBuffer(256);
sb.append("time : ");
sb.append(location.getTime());
sb.append("\nerror code : ");
sb.append(location.getLocType());
sb.append("\nlatitude : ");
sb.append(location.getLatitude());
sb.append("\nlontitude : ");
sb.append(location.getLongitude());
sb.append("\nradius : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位結果
sb.append("\nspeed : ");
sb.append(location.getSpeed());// 單位:千米每小時
sb.append("\nsatellite : ");
sb.append(location.getSatelliteNumber());
sb.append("\nheight : ");
sb.append(location.getAltitude());// 單位:米
sb.append("\ndirection : ");
sb.append(location.getDirection());// 單位度
sb.append("\naddr : ");
sb.append(location.getAddrStr());
sb.append("\ndescribe : ");
sb.append("gps定位成功");
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 網絡定位結果
sb.append("\naddr : ");
sb.append(location.getAddrStr());
//運營商信息
sb.append("\noperationers : ");
sb.append(location.getOperators());
sb.append("\ndescribe : ");
sb.append("網絡定位成功");
} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結果
sb.append("\ndescribe : ");
sb.append("離線定位成功,離線定位結果也是有效的");
} else if (location.getLocType() == BDLocation.TypeServerError) {
sb.append("\ndescribe : ");
sb.append("服務端網絡定位失敗,能夠反饋IMEI號和大致定位時間到loc-bugs@baidu.com,會有人追查緣由");
} else if (location.getLocType() == BDLocation.TypeNetWorkException) {
sb.append("\ndescribe : ");
sb.append("網絡不一樣致使定位失敗,請檢查網絡是否通暢");
} else if (location.getLocType() == BDLocation.TypeCriteriaException) {
sb.append("\ndescribe : ");
sb.append("沒法獲取有效定位依據致使定位失敗,通常是因爲手機的緣由,處於飛行模式下通常會形成這種結果,能夠試着重啓手機");
}
sb.append("\nlocationdescribe : ");
sb.append(location.getLocationDescribe());// 位置語義化信息
List<Poi> list = location.getPoiList();// POI數據
if (list != null) {
sb.append("\npoilist size = : ");
sb.append(list.size());
for (Poi p : list) {
sb.append("\npoi= : ");
sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
}
}
Log.i("BaiduLocationApiDem", sb.toString());
String dizhi = location.getAddrStr();
System.out.println(dizhi + "=========");
map_location.setText("我在" + dizhi);
//檢查覆蓋物是否存在,存在則修改,不然則添加
// location.getLatitude();
// location.getLongitude();
//定義Maker座標點
LatLng point = new LatLng( location.getLatitude(), location.getLongitude());
//構建Marker圖標
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_gcoding);
//構建MarkerOption,用於在地圖上添加Marker
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
//在地圖上添加Marker,並顯示
mBaiduMap.addOverlay(option);
}
};
mLocationClient.registerLocationListener(b); // 註冊監聽函數
initLocation();
mLocationClient.start(); }