当前位置: 代码迷 >> Android >> Android定位&map&导航——基于百度map实现的定位功能
  详细解决方案

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

热度:31   发布时间:2016-04-27 22:15:26.0
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/ 
版权声明:本文版权归杰瑞教育技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:JRedu技术交流
 
  相关解决方案