Skip to main content

3.0版快速集成

DaxiMap提供了一体化导航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:allowBackup = "true"
android:icon="@drawable/ic_launcher"
android:usesCleartextTraffic="true"
android:label="@string/app_name">

增加运行访问沙盒的配置

<meta-data android:name="ScopedStorage" android:value="true" />

加载地图#

public class MainActivity extends FragmentActivity {
DXMap mMap;
@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;
// 所有权限都已经获取
createMap();
}
@Override
public void noPermission(List<String> denied, boolean quick) {
}
});
}
private void initSDK(){
try {
DXAMapExtension.getInstance().createNaviStateUIFactory();
mNaviSDK = DXIntegratedNaviSDK.getInstance();
mNaviSDK.initWithApp(this, null);
mNaviSDK.setIntegratedNaviSDKListener(new DXIntegratedNaviSDKListener() {
@Override
public void onBuildingDecided(List<DXBuildingInfo> bdList) {
if (bdList.size() == 1) {
DXBuildingInfo bdInfo = bdList.get(0);
// mNaviSDK.Initialize(bdInfo.getBdid());
mNaviSDK.Initialize("B000A11DGP");
return;
} else if (bdList.size() > 1) {
List<String> buildingNameList = new ArrayList<String>();
for (int i = 0; i < bdList.size(); i++) {
buildingNameList.add(bdList.get(i).getCn_name());
}
final List<DXBuildingInfo> tempBDList = bdList;
DXBuildingInfo bdInfo = bdList.get(1);
// mNaviSDK.Initialize(bdInfo.getBdid());
mNaviSDK.Initialize("B000A11DGP");
// mNaviSDK.showSelectDialog("请选择车站", buildingNameList, new DXSelectDialogListener() {
// public void onSelectChanged(int selectIndex) {
// if (selectIndex >= 0) {
// String _bdid = tempBDList.get(selectIndex).getBdid();
// strBDID = _bdid;
// locationSDK.Initialize(_bdid);
// } else {
// finish();
// }
// }
// });
} else {
// Toast.makeText(mContext, "匹配车站失败,将自动进入" + strStationName, Toast.LENGTH_SHORT).show();
mNaviSDK.Initialize(mDefaultBDID);
}
}
@Override
public void onMapControllerInit(DXMapView mapView) {
DXAMapExtension.getInstance().createOutdoorMapView();
DXAMapExtension.getInstance().createObjectFactory();
}
@Override
public void onLocationManagerInit(DXLocationClient lm) {
DXAMapExtension.getInstance().createAMapLocation(lm);
}
@Override
public boolean onPageGoBack(int fragmentCount) {
return false;
}
@Override
public void onShareBtnClicked(String shareURL, HashMap<String, String> params) {
}
@Override
public void onChangeBuildingBtnClicked() {
}
@Override
public void onPositionChanged(DXLocation locationPoint) {
}
@Override
public void onDidEnterRegion(String geoName) {
}
@Override
public void onDidExitRegion(String geoName) {
}
@Override
public void onMatchBuilding(boolean isSuccessful) {
}
@Override
public void onMessageUpdate(int code, String msg) {
}
});
mNaviSDK.startBuildingDecided();
mFragments.add(mNaviSDK.getRootFragment());
mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return mFragments.size();
}
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public Fragment getItem(int arg0) {
return mFragments.get(arg0);
}
};
viewPager.setAdapter(mAdapter);
} catch (Exception e) {
e.printStackTrace();
}
}
}