Android集成百度地图实现导航

集成百度地图导航其实很简单,但是必须要在百度TT语音播报后台成功注册了注册地址注册时候很简单我就不赘述了,

上代码:

TodaytaskdetailActivity .java

package com.wdkj.housemanager.activity;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.navisdk.adapter.BNCommonSettingParam;
import com.baidu.navisdk.adapter.BNOuterLogUtil;
import com.baidu.navisdk.adapter.BNOuterTTSPlayerCallback;
import com.baidu.navisdk.adapter.BNRoutePlanNode;
import com.baidu.navisdk.adapter.BNaviSettingManager;
import com.baidu.navisdk.adapter.BaiduNaviManager;
import com.bumptech.glide.Glide;
import com.wdkj.housemanager.R;
import com.wdkj.housemanager.bean.Constant;
import com.wdkj.housemanager.bean.SuccessdEvent;
import com.wdkj.housemanager.bean.TaskItemBean;
import com.wdkj.housemanager.view.CircleImageView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

import static com.baidu.navisdk.adapter.BNRoutePlanNode.CoordinateType.BD09LL;
import static com.baidu.navisdk.adapter.BNRoutePlanNode.CoordinateType.WGS84;
import static com.baidu.navisdk.adapter.PackageUtil.getSdcardDir;
import static com.baidu.navisdk.adapter.PackageUtil.init;

/**
 * 今日任务详情
 */
public class TodaytaskdetailActivity extends Activity implements View.OnClickListener {
    @BindView(R.id.ll_back)
    LinearLayout llBack;
    @BindView(R.id.tv_creatperson)
    TextView tvCreatperson;
    @BindView(R.id.tv_task)
    TextView tvTask;
    @BindView(R.id.iv_person)
    CircleImageView ivPerson;
    @BindView(R.id.tv_execuperson)
    TextView tvExecuperson;
    @BindView(R.id.tv_category)
    TextView tvCategory;
    @BindView(R.id.tv_name)
    TextView tvName;
    @BindView(R.id.tv_status)
    TextView tvStatus;
    @BindView(R.id.tv_starttime)
    TextView tvStarttime;
    @BindView(R.id.tv_endtime)
    TextView tvEndtime;
    @BindView(R.id.tv_overtime)
    TextView tv_overtime;
    @BindView(R.id.tv_content)
    TextView tvContent;
    @BindView(R.id.wb_location)
    WebView wbLocation;
    @BindView(R.id.ll_save)
    LinearLayout llSave;
    @BindView(R.id.ll_photo)
    LinearLayout llPhoto;
    @BindView(R.id.ll_onwer)
    LinearLayout llOnwer;
    @BindView(R.id.sc_view)
    ScrollView scView;
    @BindView(R.id.iv_housesave)
    ImageView ivHousesave;
    @BindView(R.id.iv_housephoto)
    ImageView ivHousephoto;
    @BindView(R.id.iv_housejd)
    ImageView ivHousejd;
    @BindView(R.id.tv_housesave)
    TextView tvHousesave;
    @BindView(R.id.tv_housephoto)
    TextView tvHousephoto;
    @BindView(R.id.tv_housejd)
    TextView tvHousejd;
    @BindView(R.id.ll_newbottom)
    LinearLayout llNewbottom;
    @BindView(R.id.ll_task_map)
    LinearLayout llTaskmap;
    private TaskItemBean detailBean;
    private WebSettings webSettings;
    private int requestCode;
    private static final String[] authBaseArr = { Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.ACCESS_FINE_LOCATION };
    private static final String[] authComArr = { Manifest.permission.READ_PHONE_STATE };
    public static List<Activity> activityList = new LinkedList<Activity>();
    private static final int authBaseRequestCode = 1;
    private static final int authComRequestCode = 2;
    private boolean hasInitSuccess = false;
    private boolean hasRequestComAuth = false;
    public static final String ROUTE_PLAN_NODE = "routePlanNode";
    private String mSDCardPath = null;
    private static final String APP_FOLDER_NAME = "BNSDKSimpleDemo";
    private static final String TAG = "TodaytaskdetailActivity";
    private MyLocationListener myListener;
    private LocationClient mLocationClient;
    private double mCurrentLat,mCurrentLon;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityList.add(this);
        setContentView(R.layout.activity_todaytaskdetail);
        ButterKnife.bind(this);
        if (getIntent() != null) {
            detailBean = (TaskItemBean) getIntent().getSerializableExtra("todaytaskBean");
            requestCode = getIntent().getIntExtra("requestCode", 0);
        }
        initLocation();
        EventBus.getDefault().register(this);
        scView.smoothScrollTo(0, 0);

        llTaskmap.setOnClickListener(this);//点击导航

    }
    private boolean initDirs() {
        mSDCardPath = getSdcardDir();
        if (mSDCardPath == null) {
            return false;
        }
        File f = new File(mSDCardPath, APP_FOLDER_NAME);
        if (!f.exists()) {
            try {
                f.mkdir();
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        return true;
    }
    String authinfo = null;

    /**
     * 内部TTS播报状态回传handler
     */
    private Handler ttsHandler = new Handler() {
        public void handleMessage(Message msg) {
            int type = msg.what;
            switch (type) {
                case BaiduNaviManager.TTSPlayMsgType.PLAY_START_MSG: {
                    // showToastMsg("Handler : TTS play start");
                    break;
                }
                case BaiduNaviManager.TTSPlayMsgType.PLAY_END_MSG: {
                    // showToastMsg("Handler : TTS play end");
                    break;
                }
                default:
                    break;
            }
        }
    };
    /**
     * 内部TTS播报状态回调接口
     */
    private BaiduNaviManager.TTSPlayStateListener ttsPlayStateListener = new BaiduNaviManager.TTSPlayStateListener() {

        @Override
        public void playEnd() {
            // showToastMsg("TTSPlayStateListener : TTS play end");
        }

        @Override
        public void playStart() {
            // showToastMsg("TTSPlayStateListener : TTS play start");
        }
    };
    private void initNavi() {

        BNOuterTTSPlayerCallback ttsCallback = null;

        // 申请权限
        if (android.os.Build.VERSION.SDK_INT >= 23) {

            if (!hasBasePhoneAuth()) {

                this.requestPermissions(authBaseArr, authBaseRequestCode);
                return;

            }
        }

        BaiduNaviManager.getInstance().init(this, mSDCardPath, APP_FOLDER_NAME, new BaiduNaviManager.NaviInitListener() {
            @Override
            public void onAuthResult(int status, String msg) {
                if (0 == status) {
                    authinfo = "key校验成功!";
                } else {
                    authinfo = "key校验失败, " + msg;
                }
//                TodaytaskdetailActivity.this.runOnUiThread(new Runnable() {
//
//                    @Override
//                    public void run() {
//                        Toast.makeText(TodaytaskdetailActivity.this, authinfo, Toast.LENGTH_LONG).show();
//                    }
//                });
            }

            public void initSuccess() {
                //Toast.makeText(TodaytaskdetailActivity.this,"百度导航引擎初始化成功", Toast.LENGTH_SHORT).show();
                hasInitSuccess = true;
                initSetting();
            }

            public void initStart() {
                //Toast.makeText(TodaytaskdetailActivity.this, "百度导航引擎初始化开始", Toast.LENGTH_SHORT).show();
            }

            public void initFailed() {
                //Toast.makeText(TodaytaskdetailActivity.this, "百度导航引擎初始化失败", Toast.LENGTH_SHORT).show();
            }

        }, null, ttsHandler, ttsPlayStateListener);

    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ll_task_map:
                if (BaiduNaviManager.isNaviInited()) {
                    Toast.makeText(TodaytaskdetailActivity.this,"即将开始导航",Toast.LENGTH_SHORT).show();
                    routeplanToNavi();
                }
                break;
        }
    }

    private BNRoutePlanNode.CoordinateType mCoordinateType = null;

//    private void routeplanToNavi(BNRoutePlanNode.CoordinateType coType) {
private void routeplanToNavi() {
//        mCoordinateType = coType;
        if (!hasInitSuccess) {
            //Toast.makeText(TodaytaskdetailActivity.this, "还未初始化!", Toast.LENGTH_SHORT).show();
        }
        // 权限申请
        if (android.os.Build.VERSION.SDK_INT >= 23) {
            // 保证导航功能完备
            if (!hasCompletePhoneAuth()) {
                if (!hasRequestComAuth) {
                    hasRequestComAuth = true;
                    this.requestPermissions(authComArr, authComRequestCode);
                    return;
                } else {
                    //Toast.makeText(TodaytaskdetailActivity.this, "没有完备的权限!", Toast.LENGTH_SHORT).show();
                }
            }

        }
        BNRoutePlanNode sNode = null;
        BNRoutePlanNode eNode = null;
        sNode = new BNRoutePlanNode(mCurrentLon, mCurrentLat,null, null, BD09LL);//起点
        eNode = new BNRoutePlanNode(detailBean.getLon(), detailBean.getLat(),null, null, WGS84);//终点
        if (sNode != null && eNode != null) {
            List<BNRoutePlanNode> list = new ArrayList<BNRoutePlanNode>();
            list.add(sNode);//添加起点
            list.add(eNode);//添加终点
            BaiduNaviManager.getInstance().launchNavigator(this, list, 1, true, new DemoRoutePlanListener(sNode));
        }
    }
    public class DemoRoutePlanListener implements BaiduNaviManager.RoutePlanListener {

        private BNRoutePlanNode mBNRoutePlanNode = null;

        public DemoRoutePlanListener(BNRoutePlanNode node) {
            mBNRoutePlanNode = node;
        }
        @Override
        public void onJumpToNavigator() {
            /*
             * 设置途径点以及resetEndNode会回调该接口
             */
            for (Activity ac : activityList) {
                if (ac.getClass().getName().endsWith("BNDemoGuideActivity")) {
                    return;
                }
            }
            Intent intent = new Intent(TodaytaskdetailActivity.this, BNDemoGuideActivity.class);//跳转到导航界面
            Bundle bundle = new Bundle();
            bundle.putSerializable(ROUTE_PLAN_NODE, (BNRoutePlanNode) mBNRoutePlanNode);
            intent.putExtras(bundle);
            startActivity(intent);
        }

        @Override
        public void onRoutePlanFailed() {
            // TODO Auto-generated method stub
            Toast.makeText(TodaytaskdetailActivity.this, "算路失败", Toast.LENGTH_SHORT).show();
        }
    }
    private void initSetting() {
        BNaviSettingManager.setDayNightMode(BNaviSettingManager.DayNightMode.DAY_NIGHT_MODE_DAY);
        BNaviSettingManager
                .setShowTotalRoadConditionBar(BNaviSettingManager.PreViewRoadCondition.ROAD_CONDITION_BAR_SHOW_ON);
        BNaviSettingManager.setVoiceMode(BNaviSettingManager.VoiceMode.Veteran);
        // BNaviSettingManager.setPowerSaveMode(BNaviSettingManager.PowerSaveMode.DISABLE_MODE);
        BNaviSettingManager.setRealRoadCondition(BNaviSettingManager.RealRoadCondition.NAVI_ITS_ON);
        Bundle bundle = new Bundle();
        // 必须设置APPID,否则会静音
        bundle.putString(BNCommonSettingParam.TTS_APP_ID, "9480303");//将TTS申请的语音设置好
        BNaviSettingManager.setNaviSdkParam(bundle);
    }
    @Subscribe
    public void onEventMainThread(SuccessdEvent event) {
        if (event.getCode() == 100 || event.getCode() == 300) {
            detailBean.setStatus(2);
        }
    }

    private boolean hasBasePhoneAuth() {
        // TODO Auto-generated method stub

        PackageManager pm = this.getPackageManager();
        for (String auth : authBaseArr) {
            if (pm.checkPermission(auth, this.getPackageName()) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }
    private boolean hasCompletePhoneAuth() {
        // TODO Auto-generated method stub

        PackageManager pm = this.getPackageManager();
        for (String auth : authComArr) {
            if (pm.checkPermission(auth, this.getPackageName()) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }
    @Override
    protected void onResume() {
        super.onResume();
    }
    /**
     * 初始化定位
     */
    private void initLocation(){
        // 开启定位图层
        myListener = new MyLocationListener();
        mLocationClient = new LocationClient(TodaytaskdetailActivity.this);
        mLocationClient.registerLocationListener(myListener);
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(60000);
        mLocationClient.setLocOption(option);
        mLocationClient.start();
    }
    public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(final BDLocation location) {
            //获取定位结果
            // map view 销毁后不在处理新接收的位置
            if (location == null) {
                return;
            }
            mCurrentLat = location.getLatitude();
            mCurrentLon = location.getLongitude();
            //开始初始化导航信息
            BNOuterLogUtil.setLogSwitcher(true);
            if (initDirs()) {
                initNavi();
            }
        }
        @Override
        public void onConnectHotSpotMessage(String s, int i) {
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
        // 退出时销毁定位
        mLocationClient.stop();
    }

}

BNDemoGuideActivity.java

package com.wdkj.housemanager.activity;

import java.util.ArrayList;
import java.util.List;
import com.baidu.navisdk.adapter.BNRouteGuideManager;
import com.baidu.navisdk.adapter.BNRouteGuideManager.CustomizedLayerItem;
import com.baidu.navisdk.adapter.BNRouteGuideManager.OnNavigationListener;
import com.baidu.navisdk.adapter.BNRoutePlanNode;
import com.baidu.navisdk.adapter.BNaviBaseCallbackModel;
import com.baidu.navisdk.adapter.BaiduNaviCommonModule;
import com.baidu.navisdk.adapter.NaviModuleFactory;
import com.baidu.navisdk.adapter.NaviModuleImpl;
import com.baidu.navisdk.adapter.BNRoutePlanNode.CoordinateType;
import com.wdkj.housemanager.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;


/**
 * 诱导界面
 *
 * @author sunhao04
 *
 */
public class BNDemoGuideActivity extends Activity {

	private final String TAG = BNDemoGuideActivity.class.getName();
	private BNRoutePlanNode mBNRoutePlanNode = null;
	private BaiduNaviCommonModule mBaiduNaviCommonModule = null;

	/*
     * 对于导航模块有两种方式来实现发起导航。 1:使用通用接口来实现 2:使用传统接口来实现
     *
     */
	// 是否使用通用接口
	private boolean useCommonInterface = true;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		TodaytaskdetailActivity.activityList.add(this);//添加到TodaytaskdetailActivity中
		createHandler();
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
		}
		View view = null;
		if (useCommonInterface) {
			//使用通用接口
			mBaiduNaviCommonModule = NaviModuleFactory.getNaviModuleManager().getNaviCommonModule(
					NaviModuleImpl.BNaviCommonModuleConstants.ROUTE_GUIDE_MODULE, this,
					BNaviBaseCallbackModel.BNaviBaseCallbackConstants.CALLBACK_ROUTEGUIDE_TYPE, mOnNavigationListener);
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onCreate();
				view = mBaiduNaviCommonModule.getView();
			}
		} else {
			//使用传统接口
			view = BNRouteGuideManager.getInstance().onCreate(this,mOnNavigationListener);
		}


		if (view != null) {
			setContentView(view);
		}

		Intent intent = getIntent();
		if (intent != null) {
			Bundle bundle = intent.getExtras();
			if (bundle != null) {
				mBNRoutePlanNode = (BNRoutePlanNode) bundle.getSerializable(TodaytaskdetailActivity.ROUTE_PLAN_NODE);
			}
		}
		//显示自定义图标
		if (hd != null) {
			hd.sendEmptyMessageAtTime(MSG_SHOW, 5000);
		}
	}

	@Override
	protected void onResume() {
		super.onResume();
		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onResume();
			}
		} else {
			BNRouteGuideManager.getInstance().onResume();
		}



	}

	protected void onPause() {
		super.onPause();

		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onPause();
			}
		} else {
			BNRouteGuideManager.getInstance().onPause();
		}

	};

	@Override
	protected void onDestroy() {
		super.onDestroy();
		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onDestroy();
			}
		} else {
			BNRouteGuideManager.getInstance().onDestroy();
		}
		TodaytaskdetailActivity.activityList.remove(this);
	}

	@Override
	protected void onStop() {
		super.onStop();
		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onStop();
			}
		} else {
			BNRouteGuideManager.getInstance().onStop();
		}

	}

	@Override
	public void onBackPressed() {
		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onBackPressed(true);
			}
		} else {
			BNRouteGuideManager.getInstance().onBackPressed(false);
		}
	}

	public void onConfigurationChanged(android.content.res.Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onConfigurationChanged(newConfig);
			}
		} else {
			BNRouteGuideManager.getInstance().onConfigurationChanged(newConfig);
		}

	};


	@Override
	public boolean onKeyDown(int keyCode, android.view.KeyEvent event) {
		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				Bundle mBundle = new Bundle();
				mBundle.putInt(RouteGuideModuleConstants.KEY_TYPE_KEYCODE, keyCode);
				mBundle.putParcelable(RouteGuideModuleConstants.KEY_TYPE_EVENT, event);
				mBaiduNaviCommonModule.setModuleParams(RouteGuideModuleConstants.METHOD_TYPE_ON_KEY_DOWN, mBundle);
				try {
					Boolean ret = (Boolean)mBundle.get(RET_COMMON_MODULE);
					if(ret) {
						return true;
					}
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		}
		return super.onKeyDown(keyCode, event);
	}
	@Override
	protected void onStart() {
		super.onStart();
		// TODO Auto-generated method stub
		if(useCommonInterface) {
			if(mBaiduNaviCommonModule != null) {
				mBaiduNaviCommonModule.onStart();
			}
		} else {
			BNRouteGuideManager.getInstance().onStart();
		}
	}
	private void addCustomizedLayerItems() {
		List<CustomizedLayerItem> items = new ArrayList<CustomizedLayerItem>();
		CustomizedLayerItem item1 = null;
		if (mBNRoutePlanNode != null) {
			item1 = new CustomizedLayerItem(mBNRoutePlanNode.getLongitude(), mBNRoutePlanNode.getLatitude(),
					mBNRoutePlanNode.getCoordinateType(), getResources().getDrawable(R.mipmap.ic_launcher),
					CustomizedLayerItem.ALIGN_CENTER);
			items.add(item1);

			BNRouteGuideManager.getInstance().setCustomizedLayerItems(items);
		}
		BNRouteGuideManager.getInstance().showCustomizedLayer(true);
	}

	private static final int MSG_SHOW = 1;
	private static final int MSG_HIDE = 2;
	private static final int MSG_RESET_NODE = 3;
	private Handler hd = null;

	private void createHandler() {
		if (hd == null) {
			hd = new Handler(getMainLooper()) {
				public void handleMessage(android.os.Message msg) {
					if (msg.what == MSG_SHOW) {
						addCustomizedLayerItems();
					} else if (msg.what == MSG_HIDE) {
						BNRouteGuideManager.getInstance().showCustomizedLayer(false);
					} else if (msg.what == MSG_RESET_NODE) {
						BNRouteGuideManager.getInstance().resetEndNodeInNavi(
								new BNRoutePlanNode(116.21142, 40.85087, "百度大厦11", null, CoordinateType.GCJ02));
					}
				};
			};
		}
	}

	private OnNavigationListener mOnNavigationListener = new OnNavigationListener() {

		@Override
		public void onNaviGuideEnd() {
			//退出导航
			finish();
		}

		@Override
		public void notifyOtherAction(int actionType, int arg1, int arg2, Object obj) {

			if (actionType == 0) {
				//导航到达目的地 自动退出
				Log.i(TAG, "notifyOtherAction actionType = " + actionType + ",导航到达目的地!");
			}
			Log.i(TAG, "actionType:" + actionType + "arg1:" + arg1 + "arg2:" + arg2 + "obj:" + obj.toString());
		}
	};
	private final static String RET_COMMON_MODULE = "module.ret";

	private interface RouteGuideModuleConstants {
		final static int METHOD_TYPE_ON_KEY_DOWN = 0x01;
		final static String KEY_TYPE_KEYCODE = "keyCode";
		final static String KEY_TYPE_EVENT = "event";
	}
}

在AndroidManifest.xml中配置

        <activity
            android:name=".activity.BNDemoGuideActivity"
            android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

效果如下:




  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
实现百度地图定位和导航功能,需要进行以下几个步骤: 1. 在AndroidManifest.xml文件中添加相应的权限和申请百度地图SDK的Key。 2. 在布局文件中添加MapView控件,用于显示地图。 3. 在Java代码中初始化MapView控件和百度地图SDK,并进行定位和导航设置。 4. 通过百度地图SDK提供的定位功能,获取当前位置信息。 5. 通过百度地图SDK提供的导航功能,实现从当前位置到目的地的导航。 下面是一个简单的实现示例: 1. 在AndroidManifest.xml文件中添加以下权限和申请百度地图SDK的Key: ```xml <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="申请的百度地图SDK Key"/> ``` 2. 在布局文件中添加MapView控件: ```xml <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 3. 在Java代码中初始化MapView控件和百度地图SDK,并进行定位和导航设置: ```java public class MainActivity extends AppCompatActivity { private MapView mMapView; private BaiduMap mBaiduMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化MapView控件 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); // 初始化定位功能 LocationClient mLocationClient = new LocationClient(getApplicationContext()); MyLocationListener mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setCoorType("bd09ll"); option.setScanSpan(1000); mLocationClient.setLocOption(option); mLocationClient.start(); // 初始化导航功能 BNOuterLogUtil.setLogSwitcher(true); BaiduNaviManager.getInstance().init(this, getExternalFilesDir(null).getAbsolutePath(), "app_name", new NaviInitListener() { @Override public void onAuthResult(int status, String msg) { if (status == 0) { Log.e("BaiduNaviManager", "百度导航鉴权成功"); } else { Log.e("BaiduNaviManager", "百度导航鉴权失败"); } } @Override public void initSuccess() { Log.e("BaiduNaviManager", "百度导航初始化成功"); } @Override public void initStart() { Log.e("BaiduNaviManager", "百度导航初始化开始"); } @Override public void initFailed() { Log.e("BaiduNaviManager", "百度导航初始化失败"); } }, null); } // 定位回调 private class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) { return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) .direction(location.getDirection()) .latitude(location.getLatitude()) .longitude(location.getLongitude()) .build(); mBaiduMap.setMyLocationData(locData); } } } ``` 4. 通过百度地图SDK提供的定位功能,获取当前位置信息: ```java LocationClient mLocationClient = new LocationClient(getApplicationContext()); MyLocationListener mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setCoorType("bd09ll"); option.setScanSpan(1000); mLocationClient.setLocOption(option); mLocationClient.start(); ``` 5. 通过百度地图SDK提供的导航功能,实现从当前位置到目的地的导航: ```java // 初始化导航功能 BNOuterLogUtil.setLogSwitcher(true); BaiduNaviManager.getInstance().init(this, getExternalFilesDir(null).getAbsolutePath(), "app_name", new NaviInitListener() { @Override public void onAuthResult(int status, String msg) { if (status == 0) { Log.e("BaiduNaviManager", "百度导航鉴权成功"); } else { Log.e("BaiduNaviManager", "百度导航鉴权失败"); } } @Override public void initSuccess() { Log.e("BaiduNaviManager", "百度导航初始化成功"); } @Override public void initStart() { Log.e("BaiduNaviManager", "百度导航初始化开始"); } @Override public void initFailed() { Log.e("BaiduNaviManager", "百度导航初始化失败"); } }, null); // 开始导航 String startNodeStr = "当前位置"; String endNodeStr = "目的地"; double startLatitude = 0.0; double startLongitude = 0.0; double endLatitude = 0.0; double endLongitude = 0.0; BNRoutePlanNode startNode = new BNRoutePlanNode(startLongitude, startLatitude, startNodeStr, null, BNRoutePlanNode.CoordinateType.BD09LL); BNRoutePlanNode endNode = new BNRoutePlanNode(endLongitude, endLatitude, endNodeStr, null, BNRoutePlanNode.CoordinateType.BD09LL); List<BNRoutePlanNode> list = new ArrayList<>(); list.add(startNode); list.add(endNode); BaiduNaviManager.getInstance().launchNavigator(this, list, 1, true, new DemoRoutePlanListener(startNode), null); ``` 注意:以上代码仅供参考,需要根据实际情况进行修改。同时,百度地图SDK也提供了详细的开发文档和示例代码,可以帮助开发者更好地了解和使用其功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值