Android应用集成百度定位及导航
来源:互联网 发布:oracle数据库使用手册 编辑:程序博客网 时间:2024/06/06 09:11
Android应用集成百度定位及导航
步骤如下:
- 将以上所有so库分别放到arm64-v8a,armeabi,armeabi-v7a,x86,x86_64文件夹下
- 将assets文件夹里的资源拷贝到/项目名/app/src/main/下【主要用于导航】
- 将从百度定位,导航,地址转码jar包放到项目libs下
- 将以上所有资源都放到项目libs下
- 配置build.gradle
defaultConfig { multiDexEnabled true } sourceSets { main { jniLibs.srcDirs = ['libs'] } } dependencies { compile files('libs/BaiduLBS_Android.jar') }
- 配置proguard-rules.pro
-keepattributes EnclosingMethod-keep class com.baidu.**{*;}-keep class vi.com.gdi.bgl.**{*;}
- 配置AndroidManifest.xml
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <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.ACCESS_GPS" /> <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? --> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 来电消音 --> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <-- 摄影机 --> <uses-permission android:name="android.permission.CAMERA" />增加百度LBS密钥,将下面的key值修改为在LBS开放平台申请的AK。<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="CVCyYeTeOnl1TDeONgGHWhva" />定位用的service:<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" /> <service android:name=".services.LoadLocatService"/>
- 配置Application
public LocationService locationService;//百度定位 /*** * 初始化定位sdk,建议在Application中创建 */ locationService = new LocationService(getApplicationContext()); // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext SDKInitializer.initialize(getApplicationContext());
- 添加定位类
import android.content.Context;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.location.LocationClientOption.LocationMode;/** * * @author baidu * */public class LocationService { private LocationClient client = null; private LocationClientOption mOption,DIYoption; private Object objLock = new Object(); /*** * * @param locationContext */ public LocationService(Context locationContext){ synchronized (objLock) { if(client == null){ client = new LocationClient(locationContext); client.setLocOption(getDefaultLocationClientOption()); } } } /*** * * @param listener * @return */ public boolean registerListener(BDLocationListener listener){ boolean isSuccess = false; if(listener != null){ client.registerLocationListener(listener); isSuccess = true; } return isSuccess; } public void unregisterListener(BDLocationListener listener){ if(listener != null){ client.unRegisterLocationListener(listener); } } /*** * * @param option * @return isSuccessSetOption */ public boolean setLocationOption(LocationClientOption option){ boolean isSuccess = false; if(option != null){ if(client.isStarted()) client.stop(); DIYoption = option; client.setLocOption(option); isSuccess = true; } return isSuccess; } public LocationClientOption getOption(){ return DIYoption; } /*** * * @return DefaultLocationClientOption */ public LocationClientOption getDefaultLocationClientOption(){ if(mOption == null){ mOption = new LocationClientOption(); mOption.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 mOption.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; mOption.setScanSpan(3000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 mOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 mOption.setIsNeedLocationDescribe(true);//可选,设置是否需要地址描述 mOption.setNeedDeviceDirect(false);//可选,设置是否需要设备方向结果 mOption.setLocationNotify(false);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 mOption.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 mOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” mOption.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 mOption.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 mOption.setIsNeedAltitude(false);//可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用 } return mOption; } public void start(){ synchronized (objLock) { if(client != null && !client.isStarted()){ client.start(); } } } public void stop(){ synchronized (objLock) { if(client != null && client.isStarted()){ client.stop(); } } }}
- 添加自定义service
import android.Manifest;import android.annotation.TargetApi;import android.app.Activity;import android.app.Service;import android.content.Intent;import android.content.SharedPreferences;import android.content.pm.PackageManager;import android.os.Build;import android.os.IBinder;import android.support.annotation.Nullable;import android.util.Log;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.lenovo.service.ServiceApplication;import com.lenovo.service.cache.SharedPrefManager;import com.lenovo.service.entity.base.LoginData;import com.lenovo.service.http.ErrorCode;import com.lenovo.service.http.HttpClientManager;import com.lenovo.service.http.NetInterface;import com.lenovo.service.http.callback.adapter.JsonHttpCallBack;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import static android.support.v4.app.ActivityCompat.requestPermissions;import static android.support.v4.app.ActivityCompat.shouldShowRequestPermissionRationale;/** * Created by hankw on 16-8-30. */public class LoadLocatService extends Service { private final String TAG = getClass().getSimpleName(); private final int SDK_PERMISSION_REQUEST = 127; private String permissionInfo; private LocationService locService; private static final String ORDERCODE = "orderid"; private String orderid; @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onStartCommand() is starting "); getPersimmions(); locService = ((ServiceApplication) getApplication()).locationService; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand() is starting "); //此处获取工单编号 orderid = intent.getStringExtra(ORDERCODE); flags = START_STICKY; locService.registerListener(listener); if (flags == START_STICKY) { //LocationClientOption mOption = locService.getDefaultLocationClientOption(); locService.setLocationOption(locService.getOption()); } else { locService.setLocationOption(locService.getDefaultLocationClientOption()); } locService.start(); return super.onStartCommand(intent, flags, startId); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @TargetApi(23) private void getPersimmions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ArrayList<String> permissions = new ArrayList<String>(); /*** * 定位权限为必须权限,用户如果禁止,则每次进入都会申请 */ // 定位精确位置 if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION); } /* * 读写权限和电话状态权限非必要权限(建议授予)只会申请一次,用户同意或者禁止,只会弹一次 */ // 读写权限 if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; } // 读取电话状态权限 if (addPermission(permissions, Manifest.permission.READ_PHONE_STATE)) { permissionInfo += "Manifest.permission.READ_PHONE_STATE Deny \n"; } if (permissions.size() > 0) { requestPermissions((Activity) getApplicationContext(), permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST); } } } @TargetApi(23) private boolean addPermission(ArrayList<String> permissionsList, String permission) { if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { // 如果应用没有获得对应权限,则添加到列表中,准备批量申请 if (shouldShowRequestPermissionRationale((Activity) getApplicationContext(), permission)) { return true; } else { permissionsList.add(permission); return false; } } else { return true; } } /*** * 定位结果回调,在此方法中处理定位结果 */ private BDLocationListener listener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { Log.d(TAG, "onReceiveLocation() is starting "); // TODO Auto-generated method stub //Log.d(TAG, "onError() == > location.getLocType() is (" + location.getLocType()+ ")"); if (location != null && (location.getLocType() == 161 || location.getLocType() == 66)) { //Message locMsg = locHander.obtainMessage(); // TODO: 16-8-31 此处进行坐标上传操作 ,需要从share中获取token,工程师编号,上面的orderId SharedPreferences preferences = SharedPrefManager.getSystemSharedPref(getBaseContext()); String userCode = SharedPrefManager.getStringInSharePref(preferences, SharedPrefManager.LOGIN_USER_CODE, "userCode"); String token = SharedPrefManager.getStringInSharePref(preferences, SharedPrefManager.LOGIN_TOKEN, "mToken"); double longitude = location.getLongitude(); double latitude = location.getLatitude(); Log.d("LocationFilter", "onReceiveLocation() == > longitude is (" + longitude + ")"); Log.d("LocationFilter", "onReceiveLocation() == > latitude is (" + latitude + ")"); if (orderid != null &&!"userCode".equals(userCode) && !"mToken".equals(token)) { Map<String,String> params = new HashMap<String, String>(); params.put("token", token); params.put("user_code", userCode); params.put("order_code",orderid); longitude = location.getLongitude(); latitude = location.getLatitude(); params.put("lng",""+longitude); params.put("lat",""+latitude); Log.d("LocationFilter", "UPLOAD_LOCATION() == > longitude is (" + longitude + ")"); Log.d("LocationFilter", "UPLOAD_LOCATION() == > latitude is (" + latitude + ")"); HttpClientManager.post(NetInterface.UPLOAD_LOCATION, params, new JsonHttpCallBack<LoginData>() { @Override public void onSuccess(LoginData result) { Log.d(TAG,"initData() == > result.getStatus_code() is("+result.getStatus_code()+")"); if (Integer.parseInt(result.getStatus_code()) == ErrorCode.STATUS_SUCCESS) { } } @Override public void onError(Exception e) { Log.d(TAG, "onError() == > Exception is (" + e.getMessage() + ")"); } }); } } } }; @Override public void onDestroy() { super.onDestroy(); locService.unregisterListener(listener); //注销掉监听 locService.stop(); //停止定位服务 } public static void startLocService(Activity activity,String orderid){ Intent intent = new Intent(activity,LoadLocatService.class); intent.putExtra(ORDERCODE,orderid); activity.startService(intent); } public static void stopLocService(Activity activity){ Intent intent = new Intent(activity,LoadLocatService.class); activity.stopService(intent); }}
- 添加自定义地址转码和导航类
import android.app.Activity;import android.app.Dialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.support.v7.app.AlertDialog;import android.util.Log;import android.widget.EditText;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.geocode.GeoCodeOption;import com.baidu.mapapi.search.geocode.GeoCodeResult;import com.baidu.mapapi.search.geocode.GeoCoder;import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;import com.baidu.navisdk.adapter.BNOuterTTSPlayerCallback;import com.baidu.navisdk.adapter.BNRoutePlanNode;import com.baidu.navisdk.adapter.BNRoutePlanNode.CoordinateType;import com.baidu.navisdk.adapter.BNaviSettingManager;import com.baidu.navisdk.adapter.BaiduNaviManager;import com.lenovo.service.ServiceApplication;import com.lenovo.service.activity.BNDemoGuideActivity;import com.lenovo.service.services.LocationService;import java.io.File;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;/** * Created by hankw on 16-9-5. */public class BaiduNavigation implements OnGetGeoCoderResultListener { private final String TAG = getClass().getSimpleName(); public static List<Activity> activityList = new LinkedList<Activity>(); //private Context mcontext; private double elongitude; private double elatitude; private String maddress; GeoCoder mSearch = null; // 搜索模块 private static final String APP_FOLDER_NAME = "BNSDKSimpleDemo"; private String mSDCardPath = null; private String authinfo = null; private LocationService locService; private Activity activity; public static final String ROUTE_PLAN_NODE = "routePlanNode"; private CoordinateType coType = CoordinateType.BD09LL; private boolean isLocation; public BaiduNavigation(Activity activity, double lon , double lat, String address) { //this.mcontext = context; this.elongitude = lon; this.elatitude = lat; this.maddress = address.trim(); this.activity = activity; locService = ((ServiceApplication)activity.getApplication()).locationService; locService.registerListener(listener); //activityList.add(activity); locService.setLocationOption(locService.getDefaultLocationClientOption()); // 初始化搜索模块,注册事件监听 mSearch = GeoCoder.newInstance(); mSearch.setOnGetGeoCodeResultListener(this); if (initDirs()) { initNavi(); } // 打开log开关 //BNOuterLogUtil.setLogSwitcher(true); if (elongitude == 0.0 || elatitude ==0.0) { // Geo搜索 if (maddress != null || !"".equals(maddress)) { //String city = maddress.substring(0,1); mSearch.geocode(new GeoCodeOption().city("").address(maddress)); } } else { locService.start(); } } @Override public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) { if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(activity, "抱歉,未能找到结果,请修改地址后重试", Toast.LENGTH_LONG).show(); final AlertDialog.Builder builder = new AlertDialog.Builder(activity); final EditText inEdt = new EditText(activity); inEdt.setBackgroundResource(R.drawable.shape_4dpcorner_loginedit_bg); builder.setTitle("请输入准确的客户地址").setIcon(android.R.drawable.ic_dialog_info) .setView(inEdt).setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String input = inEdt.getText().toString().trim(); if (input.equals("")) { Toast.makeText(activity, "搜索内容不能为空!", Toast.LENGTH_LONG).show(); return; } else { //String city = input.substring(0,1); mSearch.geocode(new GeoCodeOption().city("").address(input)); } } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); Dialog dialog = builder.create(); dialog.show(); //return; } else { elatitude = geoCodeResult.getLocation().latitude; elongitude = geoCodeResult.getLocation().longitude; Log.d(TAG, "onGetGeoCodeResult() == > latitude is (" + elatitude + ")"); Log.d(TAG, "onGetGeoCodeResult() == > longitude is (" + elongitude + ")"); locService.start(); } } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) { } /*** * 定位结果回调,在此方法中处理定位结果 */ private BDLocationListener listener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { Log.d(TAG, "onReceiveLocation() is starting "); // TODO Auto-generated method stub if (location != null && (location.getLocType() == 161 || location.getLocType() == 66) && !isLocation) { //Message locMsg = locHander.obtainMessage(); double latitude = location.getLatitude(); double longitude = location.getLongitude(); Log.d("LocationFilter", "handleMessage() == > latitude is (" + latitude + ")"); Log.d("LocationFilter", "handleMessage() == > longitude is (" + longitude + ")"); //routeplanToNavi(BNRoutePlanNode.CoordinateType.BD09LL,longitude,latitude); locService.stop(); routeplanToNavi(longitude,latitude,elongitude,elatitude,maddress); isLocation = true; } else { if (!isLocation){ // TODO: 16-9-2 对定位当前位置失败进行处理 Toast.makeText(activity, "当前位置定位失败,请到开阔地带重试", Toast.LENGTH_SHORT).show(); return; } } } }; private String getSdcardDir() { if (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) { return Environment.getExternalStorageDirectory().toString(); } return null; } 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; } private void initNavi() { BNOuterTTSPlayerCallback ttsCallback = null; BaiduNaviManager.getInstance().init(activity, mSDCardPath, APP_FOLDER_NAME, new BaiduNaviManager.NaviInitListener() { @Override public void onAuthResult(int status, String msg) { if (0 == status) { authinfo = "导航key校验成功!"; } else { authinfo = "导航key校验失败, " + msg; } Log.d(TAG, authinfo); } public void initSuccess() { Log.d(TAG, "initSuccess() == >百度导航引擎初始化成功"); initSetting(); //routeplanToNavi(CoordinateType.BD09LL); } public void initStart() { Log.d(TAG, "initStart() == >百度导航引擎初始化开始"); } public void initFailed() { Log.d(TAG, "initStart() == >百度导航引擎初始化失败"); } }, null, ttsHandler, ttsPlayStateListener); } private void initSetting(){ // 设置是否双屏显示 BNaviSettingManager.setShowTotalRoadConditionBar(BNaviSettingManager.PreViewRoadCondition.ROAD_CONDITION_BAR_SHOW_ON); // 设置导航播报模式 BNaviSettingManager.setVoiceMode(BNaviSettingManager.VoiceMode.Veteran); // 是否开启路况 BNaviSettingManager.setRealRoadCondition(BNaviSettingManager.RealRoadCondition.NAVI_ITS_ON); } /** * 内部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 routeplanToNavi(double mlongitude,double mlatitude,double elongitude,double elatitude,String eaddress) { BNRoutePlanNode sNode = null; BNRoutePlanNode eNode = null; Log.d(TAG, "routeplanToNavi() == > mlongitude ("+mlongitude+"), mlatitude ("+mlatitude+"), elongitude ("+elongitude+"), elatitude ("+elatitude+") eaddress ("+eaddress+")"); //sNode = new BNRoutePlanNode(116.30784537597782, 40.057009624099436, "百度大厦", null, coType); sNode = new BNRoutePlanNode(mlongitude,mlatitude , "我的位置", null, coType); eNode = new BNRoutePlanNode(elongitude, elatitude, eaddress, null, coType); if (sNode != null && eNode != null) { List<BNRoutePlanNode> list = new ArrayList<BNRoutePlanNode>(); list.add(sNode); list.add(eNode); BaiduNaviManager.getInstance().launchNavigator(activity, 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(activity, BNDemoGuideActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable(ROUTE_PLAN_NODE, (BNRoutePlanNode) mBNRoutePlanNode); intent.putExtras(bundle); activity.startActivity(intent); } @Override public void onRoutePlanFailed() { // TODO Auto-generated method stub //Toast.makeText(activity, "算路失败", Toast.LENGTH_SHORT).show(); Log.d(TAG, "onRoutePlanFailed() == >算路失败"); } }}
- 添加百度导航activity
import android.app.Activity;import android.content.Intent;import android.os.Build;import android.os.Bundle;import android.util.Log;import android.view.View;import com.baidu.navisdk.adapter.BNRouteGuideManager;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.lenovo.service.BaiduNavigation;/** * 诱导界面 * * @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); BaiduNavigation.activityList.add(this); 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(BaiduNavigation.ROUTE_PLAN_NODE); } } } @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(); } BaiduNavigation.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(false); } } 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 static final int MSG_SHOW = 1; private static final int MSG_HIDE = 2; private static final int MSG_RESET_NODE = 3; 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"; }}
至此调用LoadLocatService startLocService()方法定位,调用BaiduNavigation()地址转码和导航。
0 0
- Android应用集成百度定位及导航
- Android集成百度定位以及导航详解
- android百度定位导航
- android集成百度定位
- Android studio中集成百度地图+百度定位+导航SDK冲突导致部分手机出现“百度导航引擎初始化失败”解决方案
- 百度地图集成及基本定位
- Android 百度地图API 定位 导航 代码
- Android 百度地图API 定位 导航
- android 百度地图集成之 导航
- Xamarin Android 集成百度定位SDK
- Android调用百度地图app , 实现百度定位、导航
- 百度导航,定位冲突
- 百度地图植入android应用系列教程二实现百度地图定位及方向传感器
- 百度定位集成
- Android地图应用开发之--百度地图集成及应用_baidumap
- Android百度地图API实现定位与目的地导航
- Android百度地图,绘制,覆盖物,导航,定位,细腻分解!
- Android百度地图开发定位和路线导航
- 给VMware下的Linux扩展磁盘空间(以CentOS6.3为例)
- android-async-http源码宏观分析
- servlet 剖析
- Appium常用方法介绍
- ES5对象的的创建及属性状态维护分析
- Android应用集成百度定位及导航
- Linux更新程序脚本
- Backbone入门基础 - 集合
- ScrollView嵌套GridView需要处理的事件
- children与childNodes的区别
- 建议119:不要使用自己的加密算法
- FMS 安装测试 自己进行
- 2016/9/7课上作业
- Idea中的快捷键