Android定位&地图&导航——基于百度地图实现的定位功能

一、问题描述

LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位、地图、导航等,首先我们看如何基于百度地图实现定位功能

二、配置环境

1、注册密钥:地址http://developer.baidu.com/map/

2、下载定位SDK,并导入SDK如图所示:

三、编写MyApplication类

编写MyApplication类,为了使用方便我们可以将实现定位的方法封装的Application组件中

封装下列方法

1、  获取定位信息——requestLocationInfo()

2、  通过广播发送位置信息——sendBroadCast()

3、  停止定位——stopLocationClient()

public class MyApplication extends Application{
    public LocationClient mLocationClient = null;
    public GeofenceClient mGeofenceClient;
    public MyLocationListenner myListener = new MyLocationListenner();
    public static String TAG = "MyApplication";
    private static MyApplication mInstance = null;
    @Override
    public void onCreate(){
        mInstance = this;
        mLocationClient = new LocationClient(this);
        /**
         * 项目的key,自己到官网申请 http://lbsyun.baidu.com/apiconsole/key
         */
        mLocationClient.setAK("你的应用Key");
        mLocationClient.registerLocationListener(myListener);
        mGeofenceClient = new GeofenceClient(this);
        super.onCreate();
        Log.d(TAG, "... Application onCreate... pid=" + Process.myPid());
    }

    public static  MyApplication  getInstance(){
        return mInstance;
    }

    /**
     * 停止定位
     */
    public void stopLocationClient(){
        if (mLocationClient != null && mLocationClient.isStarted()){
            mLocationClient.stop();
        }
    }

    /**
     * 发起定位
     */
    public void requestLocationInfo(){
        setLocationOption();
        if (mLocationClient != null && !mLocationClient.isStarted()){
            mLocationClient.start();
        }
        if (mLocationClient != null && mLocationClient.isStarted()){
            mLocationClient.requestLocation();
        }
    }

    /**
     *  设置百度地图的相关参数
     */
    private void setLocationOption(){
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setServiceName("com.baidu.location.service_v2.9");
        option.setPoiExtraInfo(true);
        option.setAddrType("all");
        option.setPoiNumber(10);
        option.disableCache(true);
        mLocationClient.setLocOption(option);
    }

    /**
     * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中
     */
    public class MyLocationListenner implements BDLocationListener
    {
        @Override
        public void onReceiveLocation(BDLocation location){
            if (location == null){
                sendBroadCast("定位失败!");
                return;
            }
            sendBroadCast(location.getAddrStr());
        }
        public void onReceivePoi(BDLocation poiLocation){
            if (poiLocation == null){
                sendBroadCast("定位失败!");
                return;
            }
            sendBroadCast(poiLocation.getAddrStr());
        }
    }

    /**
     * 得到发送广播
     * @param address
     */
    public void sendBroadCast(String address){
                stopLocationClient();
        Intent intent = new Intent(MainActivity.LOCATION_BCR);
        intent.putExtra("address", address);
        sendBroadcast(intent);
    }
}
三、 主程序MainActivity
public class MainActivity extends Activity{
    public static String TAG = "LocTestDemo";
    private BroadcastReceiver broadcastReceiver;
    public static String LOCATION_BCR = "location_bcr";
    private Button locBtn;
    private TextView locInfo;
    private MyApplication application;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        application=(MyApplication)super.getApplication();
        initialize();
        initializeViews();
        initializeListeners();
    }

    private void initialize(){
        registerBroadCastReceiver();//注册广播
    }

    private void initializeViews()
    {
        locBtn = (Button) findViewById(R.id.location);
        locInfo = (TextView) findViewById(R.id.location_info);
    }

    private void initializeListeners()
    {
        locBtn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                locInfo.setText("定位中...");
            //调用请求定位信息
            application.requestLocationInfo();
            }
        });
    }

    /**
     * 注册一个广播,监听定位结果,接受广播获得地址信息
     */
    private void registerBroadCastReceiver()
    {
        broadcastReceiver = new BroadcastReceiver(){
        public void onReceive(Context context, Intent intent){
            String address = intent.getStringExtra("address");
                locInfo.setText(address);
            }
        };
        IntentFilter intentToReceiveFilter = new IntentFilter();
        intentToReceiveFilter.addAction(LOCATION_BCR);
        registerReceiver(broadcastReceiver, intentToReceiveFilter);
    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
        unregisterReceiver(broadcastReceiver);
    }
}
四、 AndroidManifest.xml配置信息
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jereh.baidulocation"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <application
        android:name="com.jereh.baidulocation.MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.jereh.baidulocation.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2" >
                </action>
            </intent-filter>
        </service>
    </application>

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_LOGS" >
    </uses-permission>
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
</manifest>

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

技术咨询:

时间: 2024-10-28 03:15:55

Android定位&地图&导航——基于百度地图实现的定位功能的相关文章

Android定位&amp;地图&amp;导航——基于百度地图移动获取位置和自动定位

一.问题描述 使用百度地图实现如图所示应用,首先自动定位当前我起始位置(小圆点位置),并跟随移动不断自动定位我的当前位置 百度Api不同版本使用会有些差异,本例中加入lib如下: 二.编写MyApplication类 public class MyApplication extends Application { static MyApplication myApplication; BMapManager mBMapManager = null; String mStrKey = "7ZfuR

android 基于百度地图api开发定位以及获取详细地址

一:百度地图开发必须要到百度开发平台android开发api下载相应的库,已经申请百度地图开发key. 二:新建项目baidumaplocation.设计main.xml文件这里注意的是MapView控件必须使用来自百度库封装好的com.baidu.mapapi.MapView .设计代码如下: Xml代码   <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&q

开源基于百度地图SDK的Android交通助手App

BaiduMap-TrafficAssistant ?? 该项目是基于百度地图SDK开发的一款交通助手App,目前已经上线豌豆荚.魅族应用市场.搜狗手机助手等多个安卓应用市场.目前我决定开源该项目,为更多的安卓应用开发者或者基于百度地图SDK开发人员提供服务和便利.当然App中还有不少bug和可扩展的功能模块,也希望各位开发者为该项目贡献自己的code力量.项目地址:https://github.com/chenyufeng1991/BaiduMap-TrafficAssistant 1.项目简

基于百度地图开发网易班车地图导航展示

来到网易已经不知不觉一两个月了,最近把原来租的房子出租后,打算重新租一套房子.找到一个好房子不容易,首先考虑交通问题,上下班时间不能耗费太长,网易提供了遍布全城的班车系统,不过说实话,貌似只有文字说明(http://crystalpot.cn/menus/bus),看到这些地名,对于我一个外乡人来说内心是懵X的,想到如果有一个如高德地图版的班车导航就好了,在哪个小区租房,附近的班车信息一目了然,想到便去做,翻了翻百度地图官方文档,写了几行代码,大致实现了需求. 预览 如图所示,只有寥寥几个站点,

Android学习笔记之使用百度地图实现Poi搜索

PS:装个系统装了一天.心里憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实现地图控制这也就算是掌握了一大部分了.这次主要是说说如何去实现poi搜索.那么什么是Poi.   Poi:poi中文翻译为兴趣点.捞干的说其实就是周边的一些ktv,酒店,餐馆,理发店等等都是一个poi.在实现了基础定位的前提后,去搜索附近的poi.这样就可以完成一些其他事情.比如说订一份外卖,预定一

基于百度地图的产品销售的单位查看功能设计与实现

基于百度地图实现产品销售的单位位置查看功能设计与实现 1.描述 本人最近参与基于MVC5+EF6+ Bootstrap3的食品安全监管系统设计.开发.先前感觉百度地图很神秘的样子.高大上的样子,设计.开发过程遇到些问题,经查看园子高手指点.示例摸索实践,终将百度地图嵌入系统.为感谢各位朋友的帮助,今有空,将基于百度地图实现产品销售的单位位置查看功能,分享给大家.不当之处,欢迎指正. 2.产品生产批次查询 查看单位产品生产批次信息,根据产品生产批次查看,产品销售单位情况. 效果图如下: 3.产品销

iOS百度地图poi检索(基于百度地图2.3.0SDK开发)

正好做到百度地图的poi检索,拿来分享一下,基于百度地图2.3.0SDK开发,说实话,这个新版本poi真不好用 先来看头文件里面,定义poi对象,当然你也可以写到实现文件里面 #import <UIKit/UIKit.h> #import "BMapKit.h" @interface NearByPlaceViewController : ViewControllerBase <BMKPoiSearchDelegate> {     BMKPoiSearch *

Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误

Android Studio 项目中集成百度地图SDK报以下错误: 1 java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create)I 2 at com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create(Native Met

基于百度地图程序eclipse导出APK密匙key出错

       最近基于百度地图sdk写了个demo,在eclipse上真机测试的时候是正常运行的,没有任何问题,但是当我导出apk安装到手机上的时候,却发现地图都是白格子,经调试发现程序并没有访问百度地图后台失败,发现原来是密匙key出错了       通过再三调试,原来在打包成apk的时候,eclipse的用来申请密匙的sha1变了       如图示,这是eclipse原来的sha1                                                   图一