轻量地图(LiteMap)快速集成
DaxiMap提供了轻量化的SDK,该SDK不依赖第三方的地图SDK,方便用户快速集成到自己的应用中,包括了地图浏览,定位,POI搜索,路径规划,导航等功能
添加密钥(Key)#
在application中添加开发密钥
<application>
<meta-data android:name="com.daximap.mapapi.appkey" android:value="开发者 key" />
添加所需权限#
使用DXMapSDK需要添加读写权限和网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
// 自定义缓存目录添加下面两个
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
// 访问蓝牙的权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
// 定位的权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
修改配置#
在application项目中要加入android:usesCleartextTraffic=true
<application
...
android:usesCleartextTraffic="true"
/>
增加运行访问沙盒的配置
<meta-data android:name="ScopedStorage" android:value="true" />
在布局xml文件中添加地图控件#
在布局activity_main.xml文件中添加地图控件
<com.indoor.map.api.DXLiteMapView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mapview"/>
初始化DaxiMap SDK#
在应用程序创建时初始化 SDK引用的Context 全局变量,注意这个MainApplication需要在AndroidManifest.xml里注册
public class MainApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
//初始化SDK
DXSDK.init(this);
// 设置Token,在地图管理页面获取
DXSDK.setToken("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// 配置版本为2
DXSDK.setConfigVersion(2);
}
}
将application对应的类改为MainApplication
<application
android:name="com.daxi.map3d.demo.MainApplication" />
加载地图#
public class MainActivity extends FragmentActivity {
private DXMap mMap = null;
private DXMapView mMapView = null;
private DXLocationClient mLocationClient = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在android 6.0以上的系统中地图需要动态申请权限
DXPermissionVerifyHelper.requestEssentialPermissions(this, new DXPermissionVerifyListener(){
@Override
public void hasPermission(List<String> granted, boolean isAll) {
if (!isAll) return;
// 所有权限都已经获取
openMap();
}
@Override
public void noPermission(List<String> denied, boolean quick) {
}
});
}
// 创建地图
private void openMap(){
// 设置Token,在地图管理页面获取
DXSDK.setToken("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
mMapView = (DXMapView) findViewById(R.id.mapView);
mMap = mMapView.getMap();
mMap.setOnPageChangedListener(new DXOnPageChangedListener(){
@Override
public void onPageGoBack(int fragmentCount) {
if(fragmentCount <= 1){
finish();
}
}
});
mMap.setOnMapViewInitListener(new DXOnMapViewInitListener() {
@Override
public void onMapInitStart(DXMapView mapView) {
}
@Override
public void onMapInitSuccess() {
initLocation();
// handler.postDelayed(runnable , 2000);
}
@Override
public void onMapUpgrade(DXMapUpgradeInfo upgradeInfo) {
mMap.upgradeData(upgradeInfo, new DXDownloadProgressListener() {
@Override
public void onCompleted(String bdid) {
}
@Override
public void onProgress(int progress) {
}
@Override
public void onFailure(String bdid, int errorCode) {
}
});
}
@Override
public void onMapInitFailed(int code, String msg) {
}
@Override
public void onMapViewTimeOut(int code, String msg) {
}
});
mMap.loadMap(mBDID);
}
// 创建定位
private void initLocation(){
try {
final Context context = this;
mLocationClient = new DXLocationClient();
// 定位的配置
DXLocationClientOption locationOption = new DXLocationClientOption();
locationOption.setCoordsType("gcj02");
// 初始化定位
mLocationClient.initialize(context, locationOption);
mLocationClient.setLocationListener(new DXLocationListener() {
@Override
public boolean onCreate() {
return false;
}
@Override
public void onStartLocationSuccessful() {
Toast.makeText(context, "开始定位", Toast.LENGTH_SHORT).show();
}
@Override
public void onStartLocationFailed(int code) {
if(code == 1){
// GPS permission denied
Toast.makeText(context, "没有获得GPS定位权限", Toast.LENGTH_SHORT).show();
}else if(code == 2){
// Permission granted but GPS switch off
Toast.makeText(context, "没有打开GPS", Toast.LENGTH_SHORT).show();
}else if(code == 6){
// Beacon permission denied
Toast.makeText(context, "没有获得蓝牙权限", Toast.LENGTH_SHORT).show();
}else if(code == 7){
// ermission granted but beacon switch off
Toast.makeText(context, "没有打开蓝牙", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onLocationChanged(DXLocation location) {
if(mMap != null){
mMap.updateLocation(location);
}
}
@Override
public void onDidEnterRegion(String geoName) {
}
@Override
public void onDidExitRegion(String geoName) {
}
@Override
public void onBeaconDataUpdated(DXBeaconDevice device) {
}
@Override
public void onSensorDataUpdated(String data) {
if(mMap != null){
mMap.updateSensorData(data);
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
mLocationClient.startLocation();
}
}