欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android百度地图导航Demo_百度导航例子_安卓导航实例

程序员文章站 2022-03-01 16:03:08
...

介绍

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

现在我把我的研究成果和大家分享一下、其实百度的 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