//先在dream下加图////////////////////////compile files('libs/BaiduLBS_Android.jar')
/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.baidumapdemo.MainActivity">
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</RelativeLayout>
/***********************************************&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/
加jniLibs包
/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/注册
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.baidumapdemo">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<application
android:name=".app.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="EDRciqD1CuOeSHnvX13GcuG07cwhBFwT" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"></service>
</application>
</manifest>
/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/App
import android.app.Application;
import com.baidu.mapapi.SDKInitializer;
/**
* Created by hasee on 2017/9/9.
*/
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
SDKInitializer.initialize(getApplicationContext());
}
}
/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/MainActivity
package com.example.baidumapdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.PolygonOptions;
import com.baidu.mapapi.map.Stroke;
import com.baidu.mapapi.model.LatLng;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private MapView mMapView;
private BaiduMap mBaiduMap;
private Marker marker;
public LocationClient mLocationClient = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocationClient = new LocationClient(getApplicationContext());
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
initLocation();
//声明LocationClient类
mLocationClient.registerLocationListener(new MyLocationListener());
mLocationClient.start();
//注册监听函数
//普通地图
// mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//卫星地图
// mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
//开启交通图
// mBaiduMap.setTrafficEnabled(true);
//热力图
// mBaiduMap.setBaiduHeatMapEnabled(true);
//定义Maker坐标点
LatLng point = new LatLng(39.963175, 116.400244);
//构建Marker图标
BitmapDescriptor icon_marka = BitmapDescriptorFactory
.fromResource(R.drawable.icon_marka);
BitmapDescriptor icon_markb = BitmapDescriptorFactory
.fromResource(R.drawable.icon_markb);
BitmapDescriptor icon_markc = BitmapDescriptorFactory
.fromResource(R.drawable.icon_markc);
BitmapDescriptor icon_markd = BitmapDescriptorFactory
.fromResource(R.drawable.icon_markd);
ArrayList<BitmapDescriptor> giflist = new ArrayList<BitmapDescriptor>();
giflist.add(icon_marka);
giflist.add(icon_markb);
giflist.add(icon_markc);
giflist.add(icon_markd);
//构建MarkerOption,用于在地图上添加Marker
MarkerOptions options = new MarkerOptions()
.position(point) //设置marker的位置
.icons(giflist) //设置marker图标
.zIndex(1) //设置marker所在层级
.period(100)
.draggable(true); //设置手势拖拽
//将marker添加到地图上
options.animateType(MarkerOptions.MarkerAnimateType.jump);
// marker = (Marker) (mBaiduMap.addOverlay(options));
//调用BaiduMap对象的setOnMarkerDragListener方法设置marker拖拽的监听
mBaiduMap.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() {
public void onMarkerDrag(Marker marker) {
//拖拽中
}
public void onMarkerDragEnd(Marker marker) {
//拖拽结束
LatLng position = marker.getPosition();
Toast.makeText(MainActivity.this, "纬度 : "+ position.latitude +" 经度: "+ position.longitude, Toast.LENGTH_SHORT).show();
}
public void onMarkerDragStart(Marker marker) {
//开始拖拽
}
});
LatLng pt1 = new LatLng(39.93923, 116.357428);
LatLng pt2 = new LatLng(39.91923, 116.327428);
LatLng pt3 = new LatLng(39.89923, 116.347428);
LatLng pt4 = new LatLng(39.89923, 116.367428);
LatLng pt5 = new LatLng(39.91923, 116.387428);
List<LatLng> pts = new ArrayList<LatLng>();
pts.add(pt1);
pts.add(pt2);
pts.add(pt3);
pts.add(pt4);
pts.add(pt5);
//构建用户绘制多边形的Option对象
OverlayOptions polygonOption = new PolygonOptions()
.points(pts)
.stroke(new Stroke(5, 0xAA00FF00))
.fillColor(0xAAFFFF00);
//在地图上添加多边形Option,用于显示
// mBaiduMap.addOverlay(polygonOption);
}
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有效时按照1S/1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);
//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);
//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);
//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.setEnableSimulateGps(false);
//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(final BDLocation location) {
//获取定位结果
location.getTime(); //获取定位时间
location.getLocationID(); //获取定位唯一ID,v7.2版本新增,用于排查定位问题
location.getLocType(); //获取定位类型
location.getLatitude(); //获取纬度信息
location.getLongitude(); //获取经度信息
location.getRadius(); //获取定位精准度
location.getAddrStr(); //获取地址信息
location.getCountry(); //获取国家信息
location.getCountryCode(); //获取国家码
location.getCity(); //获取城市信息
location.getCityCode(); //获取城市码
location.getDistrict(); //获取区县信息
location.getStreet(); //获取街道信息
location.getStreetNumber(); //获取街道码
location.getLocationDescribe(); //获取当前位置描述信息
location.getPoiList(); //获取当前位置周边POI信息
location.getBuildingID(); //室内精准定位下,获取楼宇ID
location.getBuildingName(); //室内精准定位下,获取楼宇名称
location.getFloor(); //室内精准定位下,获取当前位置所处的楼层信息
runOnUiThread(new Runnable() {
@Override
public void run() {
BitmapDescriptor icon_gcoding = BitmapDescriptorFactory
.fromResource(R.drawable.icon_gcoding);
//构建MarkerOption,用于在地图上添加Marker
MarkerOptions mark = new MarkerOptions()
.position(new LatLng(location.getLatitude(),location.getLongitude())) //设置marker的位置
.icon(icon_gcoding) //设置marker图标
.zIndex(10) //设置marker所在层级
.draggable(true); //设置手势拖拽
//将marker添加到地图上
mBaiduMap.addOverlay(mark);
Toast.makeText(MainActivity.this, "纬度 : "+ location.getLatitude() +" 经度: "+ location.getLatitude(), Toast.LENGTH_SHORT).show();
}
});
if (location.getLocType() == BDLocation.TypeGpsLocation){
//当前为GPS定位结果,可获取以下信息
location.getSpeed(); //获取当前速度,单位:公里每小时
location.getSatelliteNumber(); //获取当前卫星数
location.getAltitude(); //获取海拔高度信息,单位米
location.getDirection(); //获取方向信息,单位度
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
//当前为网络定位结果,可获取以下信息
location.getOperators(); //获取运营商信息
} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {
//当前为网络定位结果
} else if (location.getLocType() == BDLocation.TypeServerError) {
//当前网络定位失败
//可将定位唯一ID、IMEI、定位失败时间反馈至loc-bugs@baidu.com
} else if (location.getLocType() == BDLocation.TypeNetWorkException) {
//当前网络不通
} else if (location.getLocType() == BDLocation.TypeCriteriaException) {
//当前缺少定位依据,可能是用户没有授权,建议弹出提示框让用户开启权限
//可进一步参考onLocDiagnosticMessage中的错误返回码
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
/**********************************************&&&&&&&&&&&&&&&&&&&&&&&&&&&&^^&&&&&&&&&&&&&&&&&&&&&&&/buid.gride
apply plugin: 'com.android.application'
android {
signingConfigs {
config {
keyAlias 'baidukey'
keyPassword '123456'
storeFile file('H:/studio/space/demo/BaiduMapDemo/app/baidukeystore.jks')
storePassword '123456'
}
}
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.example.baidumapdemo"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile files('libs/BaiduLBS_Android.jar')
}
本文详细介绍如何在Android应用中集成百度地图SDK并实现定位功能。包括必要的权限配置、地图视图展示、自定义标记图标及拖拽效果、多边形绘制等。同时介绍了LocationClient的使用方法以及如何解析定位结果。

被折叠的 条评论
为什么被折叠?



