一、问题描述
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>
本文向大家介绍Android百度地图应用之基本地图功能实现,包括了Android百度地图应用之基本地图功能实现的使用技巧和注意事项,需要的朋友参考一下 一、简介 1、地图 地图展示:普通地图(2D,3D)、卫星图和实时交通图。 地图操作:可通过接口或手势控制来实现地图的点击、双击、长按、缩放、平移、旋转、改变视角等操作。 2、地图类型 百度地图Android SDK 3.6.1提供了两种类
本文向大家介绍基于Arcgis for javascript实现百度地图ABCD marker的效果,包括了基于Arcgis for javascript实现百度地图ABCD marker的效果的使用技巧和注意事项,需要的朋友参考一下 先给大家展示实现后效果: 为直观期间,先贴出来我做的效果 列表展示和地图展示以及联动 显示信息 实现思路: 1、列表与地图的互动 鼠标经过列表时,修改列表图标,并根
我正在为一个中国客户创建一个Android应用程序,他们需要地图集成,所以谷歌地图不是一个选项,因为所有谷歌服务在中国都被屏蔽了。我正在尝试使用百度地图,它被称为百度LBS(基于位置的服务)云。 获得一个没有覆盖的基本地图相对容易。过程在这里描述(中文,但如果你不懂语言,代码不言自明)。下载最新的百度AndroidSDK(在撰写本文时为v3.2.0)并将其作为库集成到我的Eclipse项目中没问题
本文向大家介绍Spring Security基于json登录实现过程详解,包括了Spring Security基于json登录实现过程详解的使用技巧和注意事项,需要的朋友参考一下 主要是重写attemptAuthentication方法 导入依赖 相关配置和代码 application.properties配置密码 spring.security.user.name=admin spring.se
本文向大家介绍基于vue+element实现全局loading过程详解,包括了基于vue+element实现全局loading过程详解的使用技巧和注意事项,需要的朋友参考一下 项目中使用的是vue+element实现的全局loading 1.引入所需组件,这里主要就是router和element组件,element组件引入可以参考element官网 2.下面就是重点及代码实现了 首先是全局的一个变
本文向大家介绍python实现ip地址查询经纬度定位详解,包括了python实现ip地址查询经纬度定位详解的使用技巧和注意事项,需要的朋友参考一下 1、此api已经关闭 https://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&ak=你申请的AK&extensions=1&coord=bd09ll 2、现在改成 API首页:htt