Android百度地图导航Demo_百度导航例子_安卓导航实例
2014-08-26 15:11:24  By: dwtedx

介绍

由于项目需要、这两天几天一直在研究百度导航的功能、通过不断的实践终于有结果了、不愿意独享

现在我把我的研究成果和大家分享一下、其实百度的 API 已经相当不错了

这之所以要写出来、一是自己做一个笔记、二是以方便一起朋友少走弯路


百度导航SDK由三部分组成:代码Jar包,资源包,so动态库。代码Jar包由Java源代码编译打包而成

提供在线导航、线路规划、语音播报等功能/资源包由导航所需的配置数据、基础数据

以及导航功能所需的layout、drawable、string等资源打包而成

So动态库是由native代码编译而成,主要是地图、导航、路线规划、语音播报等功能的底层实现


导入库文件

在相关下载最新的库文件

在新建的Android工程里的assets目录添加BaiduNaviSDK_Resource_vX_X_X.png和channel文件

在libs目录添加BaiduNaviSDK_vX_X_X.jar、android_api_1.1_forsdk.jar、galaxy_mini.jar、galaxy_mini_lbs.jar、lbsCoreSDK.jar

在libs/armeabi目录添加libapp_BaiduNaviApplib_vX_X.so、libejTTS.so、libCNPackage.so、liblocnaviSDK.so

确定后返回、这样您就可以在程序中使用百度定位SDK了


设置AndroidManifest.xml

在application标签中声明service组件,每个app拥有自己单独的导航service

<meta-data android:name="com.baidu.lbsapi.API_KEY"  
android:value="你的百度key,源代码中已经提供了我申请的key" />  
<service 
    android:name="com.baidu.navi.location.f" 
    android:enabled="true"/>


声明使用权限

<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" />


百度导航基本使用

public class RouteGuideDemo extends Activity{
    private BNaviPoint mStartPoint = new BNaviPoint(116.30142, 
        40.05087,"百度大厦", BNaviPoint.CoordinateType.GCJ02);
    private BNaviPoint mEndPoint = new BNaviPoint(116.39750, 
        39.90882, "北京天安门", BNaviPoint.CoordinateType.GCJ02);
    private List<BNaviPoint> mViaPoints = new ArrayList<BNaviPoint>();
    private Button mBtnAddViaPoint;
    
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_routeguide);
        mBtnAddViaPoint = (Button) findViewById(R.id.add_via_btn); 
        mBtnAddViaPoint.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    addViaPoint();
                }
            });
    }

    private void addViaPoint() {
        EditText viaXEditText = (EditText) findViewById(R.id.et_via_x);
        EditText viaYEditText = (EditText) findViewById(R.id.et_via_y);
        double latitude = 0, longitude = 0;
        try {
            latitude = Integer.parseInt(viaXEditText.getText()
                .toString());
            longitude = Integer.parseInt(viaYEditText.getText()
                .toString());
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        // 默认坐标系为GCJ
        BNaviPoint viaPoint = new BNaviPoint(longitude/1e5, 
            latitude/1e5, "途经点" + (mViaPoints.size()+1));
        mViaPoints.add(viaPoint);
        Toast.makeText(this, "已添加途经点:" 
            + viaPoint.getName(), Toast.LENGTH_SHORT).show();
        if (mViaPoints.size() >= 3) {
            mBtnAddViaPoint.setEnabled(false);
        }
    }

    //启动GPS导航. 前置条件:导航引擎初始化成功
    private void launchNavigator(){
        //这里给出一个起终点示例,实际应用中可以通过POI检索
        //外部POI来源等方式获取起终点坐标
        BaiduNaviManager.getInstance().launchNavigator(this,
                40.05087, 116.30142,"百度大厦", 
                39.90882, 116.39750,"北京天安门",
                NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME, 
                true,
                BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY,
                new OnStartNavigationListener() {
                    
                    @Override
                    public void onJumpToNavigator(Bundle configParams) {
                        Intent intent = new Intent(RouteGuideDemo.this, 
                        BNavigatorActivity.class);
                        intent.putExtras(configParams);
                        startActivity(intent);
                    }
                    
                    @Override
                    public void onJumpToDownloader() {
                    }
                });
    }
    
    //指定导航起终点启动GPS导航.起终点可为多种类型坐标系的地理坐标。
    //前置条件:导航引擎初始化成功
    private void launchNavigator2(){
        //这里给出一个起终点示例,实际应用中可以通过POI检索、
        //外部POI来源等方式获取起终点坐标
        BNaviPoint startPoint = new BNaviPoint(116.307854,40.055878, "百度大厦", BNaviPoint.CoordinateType.BD09_MC);
        BNaviPoint endPoint = new BNaviPoint(116.403875,39.915168, "北京天安门", BNaviPoint.CoordinateType.BD09_MC);
        BaiduNaviManager.getInstance().launchNavigator(this, startPoint, endPoint,
            NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME, true,
            BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY,
            new OnStartNavigationListener() {
                
                @Override
                public void onJumpToNavigator(Bundle configParams) {
                    Intent intent = new Intent(RouteGuideDemo.this, 
                    BNavigatorActivity.class);
                    intent.putExtras(configParams);
                    startActivity(intent);
                }
                
                @Override
                public void onJumpToDownloader() {
                }
            });
    }
}


最后、还是给大家献上源码链接: http://dwtedx.com/download.html?bdkey=s/1pJx6gHl 密码: 0lga

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

DD记账
top
+