当前位置:   article > 正文

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题...

android locationmanager.getlastknownlocation

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索。该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题

一. 定位当前位置的原理及实现

      定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定位方式确定移动设备所在的位置。
      其基本步骤如下:(参考郭神《Android第一行代码》)

      1.先实例LocationManager,getSystemService(Context.LOCATION_SERVICE)再确定获取系统的定位服务;
      2.选择位置提供器,通常会使用LocationManager.NETWORK_PROVIDER网络定位(精准度差、耗电少)或LocationManager.GPS_PROVIDER实现GPS定位(精准度高、耗电多);
      3.然后通过LocationManager的getLastKnownLocation()函数,它选择位置提供器provider得到Location对象;
      4.此时你已经获取了地理位置,如果手机移动可以通过LocationManager的另一个函数requestLocationUpdates()方法获取动态的位置信息;
      5.获取当前Location后需要加载到百度地图中,可以通过GeoPoint设置当前位置经度和纬度,并使用MyLocationOverlay载入该数据及添加当前位置覆盖物。

      其核心代码如下所示:

  1. //定位
  2. private Button button1; 
  3. private LocationManager locationManager;
  4. private String provider;
  5. /**
  6. * 定位自己位置 onCreate函数中点击按钮事件
  7. */
  8. button1.setOnClickListener(new OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. //获取所有位置提供器
  12. locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  13. List<String> providerList = locationManager.getProviders(true);
  14. if(providerList.contains(LocationManager.NETWORK_PROVIDER)) { //网络提供器
  15. provider = LocationManager.NETWORK_PROVIDER;
  16. } else if(provider.contains(LocationManager.GPS_PROVIDER)) { //GPS提供器
  17. provider = LocationManager.GPS_PROVIDER;
  18. } else {
  19. Toast.makeText(MainActivity.this, "No location provider to use",
  20. Toast.LENGTH_SHORT).show();
  21. return;
  22. }
  23. //获取到记录当前位置
  24. Location location = locationManager.getLastKnownLocation(provider);
  25. if(location!=null) {
  26. //定位我的位置
  27. MapController controller = mapView.getController();
  28. controller.setZoom(16);
  29. //latitude 纬度 longitude 经度
  30. GeoPoint point = new GeoPoint((int) (location.getLatitude()*1E6),
  31. (int) (location.getLongitude()*1E6));
  32. controller.setCenter(point); //设置地图中心
  33. mapView.getOverlays().clear(); //清除地图上所有覆盖物
  34. MyLocationOverlay locationOverlay = new MyLocationOverlay(mapView);
  35. LocationData locationData = new LocationData();
  36. locationData.latitude = location.getLatitude(); //纬度
  37. locationData.longitude = location.getLongitude(); //经度
  38. locationOverlay.setData(locationData);
  39. //添加覆盖物
  40. mapView.getOverlays().add(locationOverlay);
  41. mapView.refresh(); //刷新
  42. }
  43. }
     运行效果如下图所示:
    

二. 定位当前位置的问题


      但是此时你可能会遇到两个问题:
      第一个问题是有时候百度地图不能定位到当前位置,究其原因我发现代码获取的location总为空值,即:

      Location location = locationManager.getLastKnownLocation(provider);
      第二个问题就是在能定位当前位置的情况下,获取的位置总是存在偏移,向左下方偏移一定方位。
      其中第一个问题在getLastKnownLocation(provider)总是获取Null,据说是该函数获取的是上一次Location,而且它不是一次就能定位成功的,需要多次定位才能实现。通过在getLastKnownLocation()函数后添加循环多次定位如下代码:
  1. location = locationManager.getLastKnownLocation(provider);
  2. while(location == null)
  3. {
  4. mgr.requestLocationUpdates("gps", 60000, 1, locationListener);
  5. }
      其中locationListener是消息监听,具体代码如下所示,当位置发生变化时自定义函数显示新经纬坐标。参考:stackoverflow
  1. private final LocationListener locationListener = new LocationListener() {
  2. //位置发生改变后调用
  3. public void onLocationChanged(Location location) {
  4. //更新当前设备的新位置信息
  5. showLocation(location);
  6. }
  7. //provider 被用户关闭后调用
  8. public void onProviderDisabled(String provider) {
  9. }
  10. //provider 被用户开启后调用
  11. public void onProviderEnabled(String provider) {
  12. }
  13. //provider 状态变化时调用
  14. public void onStatusChanged(String provider, int status, Bundle extras) {
  15. }
  16. };
     但是很遗憾的是我采用这种方法并没有解决该问题,这就引出了“三.定位当前位置(源码)”内容。通过另外一种百度地图获取当前位置的方法实现,通过设置LocationClient获取,而且能解决这里提到的两个问题且相对精确的实现定位。

三. 定位当前位置(源码)


     此种方法参考xiaanming大神的博客,推荐大家阅读,讲述的非常好尤其是其实现细节,我主要是阐述该问题及提供一个可行方法罢了。
        http://blog.csdn.net/xiaanming/article/details/11380619
     主要通过locSDK的LocationClient实现显示当前位置,同时此种方法如果遇到没有显示地图。其原因是:首先需要在AndroidManifest.xml中添加如下代码。
      参考:http://bbs.csdn.net/topics/390382448

  1. <application>
  2. <activity></activity>
  3. ....
  4. <service
  5. android:name="com.baidu.location.f"
  6. android:enabled="true"
  7. android:process=":remote" >
  8. </service>
  9. </application>
      1.运行效果如下图所示。
      它能获取当前位置,并且通过监听函数5秒间隔获取一次;
      public class BDLocationListenerImpl implements BDLocationListener
      在监听函数中富国flag!=1表示没有点击“定位”按钮则不实现监听定位当前位置功能;同时结合前面第二篇文章POI搜索及城市定位功能。

      下载地址Demo:http://download.csdn.net/detail/eastmount/8349191

    
    
     
 2.注意需要引入SDK包括LocSDK_3.1.jar和liblocSDK3.so,其工程结构如下所示:

     
      3.MainActivity.java文件
  1. public class MainActivity extends Activity {
  2. //BMapManager 对象管理地图、定位、搜索功能
  3. private BMapManager mBMapManager;
  4. private MapView mapView = null; //地图主控件
  5. private MapController mMapController = null; //地图控制
  6. MKMapViewListener mMapListener = null; //处理地图事件回调
  7. private MKSearch mMKSearch; //定义搜索服务类
  8. //搜索
  9. private EditText keyWordEditText;
  10. private EditText cityEditText;
  11. private Button queryButton;
  12. private static StringBuilder sb;
  13. private MyLocationOverlay myLocationOverlay;
  14. //定位
  15. private Button button1;
  16. private LocationManager locationManager;
  17. private String provider;
  18. //方法二 定位位置
  19. private BDLocation myLocation;
  20. private LocationData mLocData; //用户位置信息
  21. private LocationClient mLocClient; //定位SDK的核心类
  22. private MyLocationOverlay locationOverlay = null; //我的图层
  23. private PopupOverlay pop; //弹出pop 我的位置
  24. private int flag=0; //标记变量 定位我的位置=1 POI为2
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. /**
  29. * 创建对象BMapManager并初始化操作
  30. * V2.3.1中init(APIKey,null) V2.4.1在AndroidManifest中赋值AK
  31. * 注意 初始化操作在setContentView()前
  32. */
  33. mBMapManager = new BMapManager(getApplication());
  34. mBMapManager.init(null);
  35. setContentView(R.layout.activity_main);
  36. //获取对象
  37. mapView = (MapView) findViewById(R.id.map_view);
  38. cityEditText = (EditText) findViewById(R.id.city_edittext);
  39. keyWordEditText = (EditText) findViewById(R.id.keyword_edittext);
  40. queryButton = (Button) findViewById(R.id.query_button);
  41. button1 = (Button) findViewById(R.id.button1);
  42. //地图初始化
  43. mMapController = mapView.getController(); //获取地图控制器
  44. mMapController.enableClick(true); //设置地图是否响应点击事件
  45. mMapController.setZoom(16); //设置地图缩放级别
  46. mapView.setBuiltInZoomControls(true); //显示内置缩放控件
  47. /**
  48. * 定位自己位置
  49. */
  50. //方法二
  51. button1.setOnClickListener(new OnClickListener() {
  52. @Override
  53. public void onClick(View v) {
  54. flag = 1;
  55. locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  56. //设置缩放级别 级别越高地图显示精细
  57. MapController controller = mapView.getController();
  58. controller.setZoom(16);
  59. //实例化定位服务 LocationClient类必须在主线程中声明 并注册定位监听接口
  60. mLocClient = new LocationClient(getApplicationContext());
  61. mLocClient.registerLocationListener(new BDLocationListenerImpl());
  62. /**
  63. * LocationClientOption 该类用来设置定位SDK的定位方式。
  64. */
  65. LocationClientOption option = new LocationClientOption();
  66. option.setOpenGps(true); //打开GPRS
  67. option.setAddrType("all"); //返回的定位结果包含地址信息
  68. option.setCoorType("bd09ll"); //返回的定位结果是百度经纬度,默认值gcj02
  69. option.setPriority(LocationClientOption.GpsFirst); // 设置GPS优先
  70. option.setScanSpan(5000); //设置发起定位请求的间隔时间为5000ms
  71. option.disableCache(false); //禁止启用缓存定位
  72. mLocClient.setLocOption(option); //设置定位参数
  73. mLocClient.start(); // 调用此方法开始定位
  74. //定位图层初始化
  75. mapView.getOverlays().clear();  
  76. locationOverlay= new MyLocationOverlay(mapView);
  77. //实例化定位数据,并设置在我的位置图层
  78. mLocData = new LocationData();
  79. locationOverlay.setData(mLocData);
  80. //添加定位图层
  81. mapView.getOverlays().add(locationOverlay);
  82. //修改定位数据后刷新图层生效
  83. mapView.refresh();
  84. }
  85. });
  86. /**
  87. * 初始化MKSearch 调用城市和POI搜索
  88. */
  89. mMKSearch = new MKSearch();
  90. mMKSearch.init(mBMapManager, new MySearchListener());
  91. queryButton.setOnClickListener(new OnClickListener() {
  92. @Override
  93. public void onClick(View v) {
  94. if(flag==1) {
  95. pop.hidePop();
  96. flag = 2;
  97. }
  98. mMapController = mapView.getController();
  99. mMapController.setZoom(10);
  100. sb = new StringBuilder(); //内容清空
  101. //输入正确城市关键字
  102. String city = cityEditText.getText().toString().trim();
  103. String keyWord = keyWordEditText.getText().toString().trim();
  104. if(city.isEmpty()) { //默认城市设置为贵阳
  105. city="贵阳";
  106. }
  107. //如果关键字为空只搜索城市 GEO搜索
  108. if(keyWord.isEmpty()) {
  109. mMKSearch.geocode(city, city); //具体地址和城市 geocode(adress, city)
  110. }
  111. else {
  112. //搜索城市+关键字
  113. mMKSearch.setPoiPageCapacity(10); //每页返回POI数
  114. mMKSearch.poiSearchInCity(city, keyWord);
  115. }
  116. }
  117. });
  118. }
  119. /**
  120. * 定位接口,需要实现两个方法
  121. * 参考 http://blog.csdn.net/xiaanming/article/details/11380619
  122. */
  123. public class BDLocationListenerImpl implements BDLocationListener {
  124. /**
  125. * 接收异步返回的定位结果,参数是BDLocation类型参数
  126. */
  127. @Override
  128. public void onReceiveLocation(BDLocation location) {
  129. if (location == null || flag != 1) {
  130. return;
  131. }
  132. MapController controller = mapView.getController();
  133. //设置经纬度
  134. MainActivity.this.myLocation = location;
  135. mLocData.latitude = location.getLatitude();
  136. mLocData.longitude = location.getLongitude();
  137. GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6),
  138. (int) (location.getLongitude() * 1E6));
  139. controller.setCenter(point);
  140. //如果不显示定位精度圈,将accuracy赋值为0即可
  141. //mLocData.accuracy = location.getRadius();
  142. mLocData.direction = location.getDerect();
  143. mLocData.accuracy = 0;
  144. //将定位数据设置到定位图层里
  145. locationOverlay.setData(mLocData);
  146. //更新图层数据执行刷新后生效
  147. mapView.refresh();
  148. //覆盖物
  149. if(flag==1) {
  150. //添加图形
  151. pop = new PopupOverlay(mapView, new PopupClickListener() {
  152. @Override
  153. public void onClickedPopup(int index) {
  154. }
  155. });
  156. Bitmap[] bitmaps = new Bitmap[3];
  157. try {
  158. bitmaps[0] = BitmapFactory.decodeResource(getResources(),
  159. R.drawable.left);
  160. bitmaps[1] = BitmapFactory.decodeResource(getResources(),
  161. R.drawable.middle);
  162. bitmaps[2] = BitmapFactory.decodeResource(getResources(),
  163. R.drawable.right);
  164. } catch (Exception e) {
  165. e.printStackTrace();
  166. }
  167. pop.showPopup(bitmaps, point, 18);
  168. }
  169. }
  170. /**
  171. * 接收异步返回的POI查询结果,参数是BDLocation类型参数
  172. */
  173. @Override
  174. public void onReceivePoi(BDLocation poiLocation) {
  175. }
  176. }
  177. @Override
  178. protected void onResume() {
  179. mapView.onResume();
  180. if (mBMapManager != null) {
  181. mBMapManager.start();
  182. }
  183. super.onResume();
  184. }
  185. @Override
  186. protected void onDestroy() {
  187. mapView.destroy();
  188. if (mBMapManager != null) {
  189. mBMapManager.destroy();
  190. mBMapManager = null;
  191. }
  192. super.onDestroy();
  193. }
  194. @Override
  195. protected void onPause() {
  196. mapView.onPause();
  197. if (mBMapManager != null) {
  198. mBMapManager.stop();
  199. }
  200. super.onPause();
  201. }
  202. /**
  203. * 内部类实现MKSearchListener接口,用于实现异步搜索服务
  204. */
  205. public class MySearchListener implements MKSearchListener {
  206. /**
  207. * 根据经纬度搜索地址信息结果
  208. * 同时mMKSearch.geocode(city, city)搜索城市返回至该函数
  209. *
  210. * @param result 搜索结果
  211. * @param iError 错误号(0表示正确返回)
  212. */
  213. @Override
  214. public void onGetAddrResult(MKAddrInfo result, int iError) {
  215. if (result == null) {
  216. return;
  217. }
  218. StringBuffer sbcity = new StringBuffer();
  219. sbcity.append(result.strAddr).append("\n"); //经纬度所对应的位置
  220. mapView.getOverlays().clear(); //清除地图上已有的所有覆盖物
  221. mMapController.setCenter(result.geoPt); //置为地图中心
  222. //添加原点并刷新
  223. LocationData locationData = new LocationData();
  224. locationData.latitude = result.geoPt.getLatitudeE6();
  225. locationData.longitude = result.geoPt.getLongitudeE6();
  226. myLocationOverlay = new MyLocationOverlay(mapView);
  227. myLocationOverlay.setData(locationData);
  228. mapView.getOverlays().add(myLocationOverlay);
  229. mapView.refresh();
  230. // 通过AlertDialog显示地址信息
  231. new AlertDialog.Builder(MainActivity.this)
  232. .setTitle("显示当前城市地图")
  233. .setMessage(sbcity.toString())
  234. .setPositiveButton("关闭", new DialogInterface.OnClickListener() {
  235. public void onClick(DialogInterface dialog, int whichButton) {
  236. dialog.dismiss();
  237. }
  238. }).create().show();
  239. }
  240. /**
  241. * POI搜索结果(范围检索、城市POI检索、周边检索)
  242. *
  243. * @param result 搜索结果
  244. * @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
  245. * @param iError 错误号(0表示正确返回)
  246. */
  247. @Override
  248. public void onGetPoiResult(MKPoiResult result, int type, int iError) {
  249. if (result == null) {
  250. return;
  251. }
  252. //获取POI并显示
  253. mapView.getOverlays().clear();
  254. PoiOverlay poioverlay = new PoiOverlay(MainActivity.this, mapView); //显示POI
  255. poioverlay.setData(result.getAllPoi()); //设置搜索到的POI数据
  256. mapView.getOverlays().add(poioverlay); //兴趣点标注在地图上
  257. mapView.refresh();
  258. //设置其中一个搜索结果所在地理坐标为地图的中心
  259. if(result.getNumPois() > 0) {
  260. MKPoiInfo poiInfo = result.getPoi(0);
  261. mMapController.setCenter(poiInfo.pt);
  262. }
  263. //添加StringBuffer 遍历当前页返回的POI (默认只返回10个)
  264. sb.append("共搜索到").append(result.getNumPois()).append("个POI\n");
  265. for (MKPoiInfo poiInfo : result.getAllPoi()) {
  266. sb.append("名称:").append(poiInfo.name).append("\n");
  267. }
  268. // 通过AlertDialog显示当前页搜索到的POI
  269. new AlertDialog.Builder(MainActivity.this)
  270. .setTitle("搜索到的POI信息")
  271. .setMessage(sb.toString())
  272. .setPositiveButton("关闭", new DialogInterface.OnClickListener() {
  273. public void onClick(DialogInterface dialog, int whichButton) {
  274. dialog.dismiss();
  275. }
  276. }).create().show();
  277. }
  278. /**
  279. * 驾车路线搜索结果
  280. *
  281. * @param result 搜索结果
  282. * @param iError 错误号(0表示正确返回)
  283. */
  284. @Override
  285. public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
  286. }
  287. /**
  288. * 公交换乘路线搜索结果
  289. *
  290. * @param result 搜索结果
  291. * @param iError 错误号(0表示正确返回)
  292. */
  293. @Override
  294. public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
  295. }
  296. /**
  297. * 步行路线搜索结果
  298. *
  299. * @param result 搜索结果
  300. * @param iError 错误号(0表示正确返回)
  301. */
  302. @Override
  303. public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
  304. }
  305. @Override
  306. public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
  307. // TODO Auto-generated method stub
  308. }
  309. @Override
  310. public void onGetPoiDetailSearchResult(int arg0, int arg1) {
  311. // TODO Auto-generated method stub
  312. }
  313. @Override
  314. public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) {
  315. // TODO Auto-generated method stub
  316. }
  317. @Override
  318. public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
  319. // TODO Auto-generated method stub
  320. }
  321. }
  322. }
     4.布局文件activity_main.xml,同时添加图片left.png、middle.png和right.png
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:id="@+id/container"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:background="#000000"
  7. tools:context="com.example.baidumapshow.MainActivity"
  8. tools:ignore="MergeRootFrame" >
  9. <!-- 顶部搜索 -->
  10. <RelativeLayout
  11. android:id="@+id/MyLayout_top"
  12. android:orientation="horizontal"
  13. android:layout_width="fill_parent"
  14. android:layout_height="40dp"
  15. android:layout_alignParentTop="true"
  16. android:gravity="center">
  17. <LinearLayout
  18. android:orientation="horizontal"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:background="@null"
  22. android:padding="0dip" >
  23. <EditText android:id="@+id/city_edittext"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:layout_gravity="center_vertical"
  27. android:layout_marginLeft="5dp"
  28. android:background="#ffffff"
  29. android:textSize="22dp"
  30. android:hint="输入城市"
  31. android:layout_weight="15" />
  32. <EditText android:id="@+id/keyword_edittext"
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:layout_gravity="center_vertical"
  36. android:layout_marginLeft="5dp"
  37. android:background="#ffffff"
  38. android:textSize="22dp"
  39. android:hint="输入关键词"
  40. android:layout_weight="25" />
  41. <Button android:id="@+id/query_button"
  42. android:layout_width="wrap_content"
  43. android:layout_height="wrap_content"
  44. android:layout_gravity="center_vertical"
  45. android:textColor="#ffffff"
  46. android:textSize="20dp"
  47. android:text="搜索" />
  48. </LinearLayout>
  49. </RelativeLayout>
  50. <!-- 底部添加按钮 -->
  51. <RelativeLayout
  52. android:id="@+id/MyLayout_bottom"
  53. android:orientation="horizontal"
  54. android:layout_width="fill_parent"
  55. android:layout_height="50dp"
  56. android:layout_alignParentBottom="true"
  57. android:gravity="center">
  58. <LinearLayout
  59. android:layout_width="match_parent"
  60. android:layout_height="match_parent"
  61. android:orientation="horizontal"
  62. android:layout_alignParentBottom="true" >
  63. <Button
  64. android:id="@+id/button1"
  65. android:layout_width="wrap_content"
  66. android:layout_height="match_parent"
  67. android:layout_weight="1"
  68. android:textColor="#ffffff"
  69. android:text="定位" />
  70. </LinearLayout>
  71. </RelativeLayout>
  72. <!-- 显示图片 -->
  73. <RelativeLayout
  74. android:id="@+id/Content_Layout"
  75. android:orientation="horizontal"
  76. android:layout_width="fill_parent"
  77. android:layout_height="fill_parent"
  78. android:layout_above="@id/MyLayout_bottom"
  79. android:layout_below="@id/MyLayout_top"
  80. android:gravity="center">
  81. <com.baidu.mapapi.map.MapView
  82. android:id="@+id/map_view"
  83. android:layout_width="fill_parent"
  84. android:layout_height="fill_parent"
  85. android:clickable="true" />
  86. </RelativeLayout>
  87. </RelativeLayout>
      5.设置AndroidMainfest.xml权限及服务,同时设置百度地图APIKey,第一篇文章有详细讲述。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.baidumapshow"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk
  7. android:minSdkVersion="19"
  8. android:targetSdkVersion="19" />
  9. <!-- 获取网络状态 -->
  10. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  11. <!-- 访问网络 -->
  12. <uses-permission android:name="android.permission.INTERNET" />
  13. <!-- 获取WiFi状态 -->
  14. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  15. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  16. <!-- 允许程序写入外部存储,如SD卡上写文件 -->
  17. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  18. <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  19. <!-- 读取电话状态 -->
  20. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  21. <uses-permission android:name="android.permission.CALL_PHONE" />
  22. <!-- 获取精确位置 GPS芯片接收卫星的定位信息,定位精度达10米以内 -->
  23. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  24. <!-- 通过WiFi或移动基站的方式获取用户错略的经纬度信息 -->
  25. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  26. <!-- 获取模拟定位信息 -->
  27. <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  28. <uses-permission android:name="android.permission.ACCESS_GPS" />
  29. <application
  30. android:allowBackup="true"
  31. android:icon="@drawable/ic_launcher"
  32. android:label="@string/app_name"
  33. android:theme="@style/AppTheme" >
  34. <meta-data
  35. android:name="com.baidu.lbsapi.API_KEY"
  36. android:value="QwaNhFQ0ty2QmdYh3Nrr0gQx">
  37. </meta-data>
  38. <activity
  39. android:name="com.example.baidumapshow.MainActivity"
  40. android:label="@string/app_name" >
  41. <intent-filter>
  42. <action android:name="android.intent.action.MAIN" />
  43. <category android:name="android.intent.category.LAUNCHER" />
  44. </intent-filter>
  45. </activity>
  46. <service
  47. android:name="com.baidu.location.f"
  48. android:enabled="true"
  49. android:process=":remote" >
  50. </service>
  51. </application>
  52. </manifest>
      最后希望文章对大家有所帮助,刚刚接触android开发百度地图,而且还是使用V2.4.1版本,如果有错误或不足之处,还请海涵!建议大家看看官方文档和百度提供的Demo.文章主要参考百度官方文档、xiaanming大神博客和郭神《Android第一行代码》及我前面的两篇文章.
      下载地址:http://download.csdn.net/detail/eastmount/8349191
        [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题 
       [android] 百度地图开发 (二).定位城市位置和城市POI搜索 

     (By:Eastmount 2015-01-11 夜2点 http://blog.csdn.net/eastmount/
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/290575
推荐阅读
相关标签
  

闽ICP备14008679号