博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android定位&地图&导航——基于百度地图实现的定位功能
阅读量:5911 次
发布时间:2019-06-19

本文共 5485 字,大约阅读时间需要 18 分钟。

一、问题描述

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

二、配置环境

1、注册密钥:地址

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配置信息

 

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

转载于:https://www.cnblogs.com/jerehedu/p/4958060.html

你可能感兴趣的文章
Vue.js-Day01
查看>>
node-glob通配符
查看>>
PhantomJS 安装
查看>>
硬币翻转问题,区间操作
查看>>
Git学习与使用心得(1)—— 初始化
查看>>
二维平面内的碰撞检测【一】
查看>>
linux学习笔记
查看>>
强力优化Rancher k8s中国区的使用体验
查看>>
vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
查看>>
PHP 小技巧
查看>>
re:Invent 大会第一天,看看AWS有哪些最新进展?\n
查看>>
美团全链路压测自动化实践
查看>>
那些到了 30 岁的技术人,后来都去哪了?
查看>>
为什么携程要做好持续交付?
查看>>
改变的六条规则
查看>>
如何利用又拍云玩转live photo,没有6S也能玩
查看>>
如何在 Kubernetes 中对无状态应用进行分批发布
查看>>
以精益的眼光重新关注电子商务
查看>>
dotTrace 6.1帮你理解SQL查询如何影响应用性能
查看>>
通过调研开源基准测试集,解读大数据的应用现状和开源未来
查看>>