Skip to main content

2.0版本快速集成

DaxiMap提供了一体化导航SDK,方便用户快速集成到自己的应用中,包括了地图浏览,定位,POI搜索,路径规划,室内外一体化导航,语音引导,组队等功能

下载SDKDemo#

压缩包包含了库和使用示例

下载SDKDemo

加入依赖包(jar)#

在lib目录中的加入jar包和so都 avatar

修改gradle文件#

在build.gradle文件中加入如下内容 avatar

添加所需权限#

使用DXMapSDK需要添加读写权限,网络访问权限,设置修改权限,相机访问权限(扫描二维码)等 在AndroidManifest.xml中添加以下内容

<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.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<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.READ_PHONE_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.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>

申请高德token#

一体化导航中用到了高德地图,需要去高德官网lbs.amap.com去申请apikey 申请后在AndroidManifest.xml文件中加入

<service android:name="com.amap.api.location.APSService"></service>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="这里填入Amap key" />

其他注意#

在application项目中要加入android:usesCleartextTraffic=true

<application
android:allowBackup = "true"
android:icon="@drawable/ic_launcher"
android:usesCleartextTraffic="true"
android:label="@string/app_name">

加载地图#

public class MainActivity extends FragmentActivity {
private NoScrollViewPager viewPager; //翻转页viewpager
private List<Fragment> mFragments = new ArrayList<Fragment>();
private FragmentPagerAdapter mAdapter;
public static String strBDID = "B000A11DHF"; //默认BDID
public static String strToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" //这是DaxiMap Token
public static String appConfigUrl = "https://map1a.daxicn.com/configServer/appConfig?type=zip&token="; //服务地址
public static boolean isShowBuild = true; //当前Token中有多个建筑,且当前位置不在某个建筑内部是,是否显示选择建筑列表
public static final String network_error = "当前网络不稳定,请稍后再试!";
public static final String data_error = "当前网络不稳定,请稍后再试!";
public static final String data_exist = "数据已下载";
public static final String data_download = "数据已更新";
public static final String data_updating = "数据更新中";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!=null){
return;
}
mContext = this;
setContentView(R.layout.activity_main);
viewPager = (NoScrollViewPager) findViewById(R.id.id_viewpager);
//在android 6.0以上的系统中地图需要动态申请权限
LocationSDK.requestEssentialPermissions(this, new DXPermissionListener(){
@Override
public void hasPermission(List<String> granted, boolean isAll){
if(isAll){
initLocationSDKWithUIThread();
}
}
});
}
public void initLocationSDKWithUIThread(){
final LocationSDK locationSDK = LocationSDK.getInstance();
locationSDK.setParam("simulate", "false");
locationSDK.setParam("locationSDK.setParam("Token", strToken);", "true");
locationSDK.setParam("wbrs", "true");
locationSDK.setParam("mainCss", "main_blue");
locationSDK.setParam("Token", strToken);
locationSDK.setParam("appConfigUrl",appConfigUrl);
// 初始化SDK
locationSDK.InitWithApp(this, null);
// 设置Listener
locationSDK.setLocationSDKListener(new DXLocationSDKListener(){
// 当内部点击了返回或者点击了物理返回键的时候
@Override
public boolean onPageGoBack(int pageCount){
// TODO Auto-generated method stub
if(pageCount == 0){
finish();
}
return false;
}
// 当匹配建筑的时候
@Override
public void onMatchBuilding(boolean isSuc){
if(!isSuc){
Log.e("" , "building code error");
finish();
}
}
// 当定位成功并确定在某一个建筑中或者某一个城市的时候
@Override
public void onBuildingDecided(List<DXBuildingInfo> bdList) {
LocationSDK.getInstance().dismissGifWindow();
if(!isShowBuild){
locationSDK.Initialize(strBDID);
return;
}
if(bdList.size() == 1){
DXBuildingInfo bdInfo = bdList.get(0);
locationSDK.Initialize(bdInfo.getBdid());
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;
locationSDK.showSelectDialog("请选择建筑",buildingNameList, new DXSelectDialogListener(){
public void onSelectChanged(int selectIndex){
if(selectIndex >= 0){
locationSDK.Initialize(tempBDList.get(selectIndex).getBdid());
}else{
finish();
}
}
});
}else{
Toast.makeText(mContext, "匹配建筑失败,将自动进入" + strBDID, Toast.LENGTH_SHORT).show();
locationSDK.Initialize(strBDID);
}
}
// 当定位模块初始化时候
@Override
public void onLocationManagerInit(DXIntegratedLocationManager lm) {
DXAMapExtension.getInstance().createAMapLocation(lm);
}
// 当地图模块初始化时
@Override
public void onMapControllerInit(DXFactoryManager fm) {
DXAMapExtension.getInstance().createAMapController(fm);
}
// 当数据状态变化的时候调用
@Override
public void onMapConfigDataStateChanged(Context context, int state) {
if (state == LocationSDK.DATA_NOT_EXIST) {
Toast.makeText(mContext, data_error, Toast.LENGTH_SHORT).show();
finish();
} else if (state == LocationSDK.DATA_LOAD_FROM_LOCAL) {
Toast.makeText(mContext, data_exist, Toast.LENGTH_SHORT).show();
locationSDK.showMainPage("");
} else if (state == LocationSDK.DATA_UPDATE_FROM_SERVER) {
Toast.makeText(mContext, data_download, Toast.LENGTH_SHORT).show();
} else if (state == LocationSDK.DATA_UPDATING) {
Toast.makeText(mContext, data_updating, Toast.LENGTH_SHORT).show();
}else if (state == LocationSDK.DATA_UPDATE_INIT_FINISHED) {
}else if (state == LocationSDK.NETWORK_CONNECTING_ERROR) {
Toast.makeText(mContext, network_error, Toast.LENGTH_SHORT).show();
finish();
}
}
// 当Share按钮被按下时
@Override
public void onShareBtnClicked(String shareURL, HashMap<String, String> params) {
}
// 当更换建筑按钮被按下时
public void onChangeBuildingBtnClicked(){
}
// 当位置更新的时候
@Override
public void onPositionChanged(DXLocationPoint locationPoint){
}
// 当进入某一个区域的时候
@Override
public void onDidEnterRegion(String geoName){
String toastText = "进入"+geoName;
Toast.makeText(mContext, toastText, Toast.LENGTH_SHORT).show();
}
// 当离开某一个区域的时候
@Override
public void onDidExitRegion(String geoName){
String toastText = "离开"+geoName;
Toast.makeText(mContext, toastText, Toast.LENGTH_SHORT).show();
}
// 当消息更新的时候
@Override
public void onMessageUpdate(int code, String msg){
Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
}
});
// 开始定位,并根据定位数据自动选择进入合适的建筑
LocationSDK.getInstance().startBuildingDecided();
// 将当前的Fragment加入到某一viewPager中
mFragments.add(locationSDK.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);
}
}