热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android百度地图开发——学习历程(二)

步骤:1.注册百度地图开发者平台,申请API_KEY,下载定位SDK,2.把SDK中libs中的文件全部复制到项目中的li

步骤:

1.注册百度地图开发者平台,申请API_KEY,下载定位SDK,
2.把SDK中libs中的文件全部复制到项目中的libs文件夹下。。。。。(此步骤请参考我的上一个博客)。
3.在Androidmanifest 文件中加入一下代码, 要注意接入的位置,是在第一个Application中哦

<service
android:name&#61;"com.baidu.location.f"android:enabled&#61;"true"android:process&#61;":remote">
service>

这里写图片描述

然后我贴一个完整的代码和布局文件吧&#xff0c;


MainActivity:

public class MainActivity extends Activity implements OnClickListener{private TextView mText;private LocationClient mLocationClient &#61; null;private BDLocationListener myListener &#61; new MyLocationListener();private MapView mMapView;public BaiduMap mBaiduMap;&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mLocationClient &#61; new LocationClient(getApplicationContext()); // 声明LocationClient类mLocationClient.registerLocationListener(myListener); // 注册监听函数initWidgets();setLocationOption();mLocationClient.start();// 开始定位;mMapView &#61; (MapView) findViewById(R.id.bmapView);mBaiduMap &#61; mMapView.getMap();}private void initWidgets() {mText &#61; (TextView) findViewById(R.id.tv_text);Button btn &#61; (Button) findViewById(R.id.btn_request);btn.setOnClickListener(this);}&#64;Overrideprotected void onDestroy() {super.onDestroy();mLocationClient.stop();// 停止定位}private void setLocationOption() {LocationClientOption option &#61; new LocationClientOption();option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选&#xff0c;默认高精度&#xff0c;设置定位模式&#xff0c;高精度&#xff0c;低功耗&#xff0c;仅设备option.setCoorType("bd09ll");//可选&#xff0c;默认gcj02&#xff0c;设置返回的定位结果坐标系int span&#61;1000;option.setScanSpan(span);//可选&#xff0c;默认0&#xff0c;即仅定位一次&#xff0c;设置发起定位请求的间隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可选&#xff0c;设置是否需要地址信息&#xff0c;默认不需要option.setOpenGps(true);//可选&#xff0c;默认false,设置是否使用gpsoption.setLocationNotify(true);//可选&#xff0c;默认false&#xff0c;设置是否当GPS有效时按照1S/1次频率输出GPS结果option.setIsNeedLocationDescribe(true);//可选&#xff0c;默认false&#xff0c;设置是否需要位置语义化结果&#xff0c;可以在BDLocation.getLocationDescribe里得到&#xff0c;结果类似于“在北京天安门附近”option.setIsNeedLocationPoiList(true);//可选&#xff0c;默认false&#xff0c;设置是否需要POI结果&#xff0c;可以在BDLocation.getPoiList里得到option.setIgnoreKillProcess(false);//可选&#xff0c;默认true&#xff0c;定位SDK内部是一个SERVICE&#xff0c;并放到了独立进程&#xff0c;设置是否在stop的时候杀死这个进程&#xff0c;默认不杀死option.SetIgnoreCacheException(false);//可选&#xff0c;默认false&#xff0c;设置是否收集CRASH信息&#xff0c;默认收集option.setEnableSimulateGps(false);//可选&#xff0c;默认false&#xff0c;设置是否需要过滤GPS仿真结果&#xff0c;默认需要mLocationClient.setLocOption(option);}public class MyLocationListener implements BDLocationListener {&#64;Overridepublic void onReceiveLocation(BDLocation location) {if (location &#61;&#61; null)return;StringBuffer sb &#61; new StringBuffer(256);sb.append("当前时间 : ");sb.append(location.getTime());sb.append("\n错误码 : ");sb.append(location.getLocType());sb.append("\n纬度 : ");sb.append(location.getLatitude());sb.append("\n经度 : ");sb.append(location.getLongitude());sb.append("\n半径 : ");sb.append(location.getRadius());if (location.getLocType() &#61;&#61; BDLocation.TypeGpsLocation) {//GPSsb.append("\n速度 : ");sb.append(location.getSpeed());sb.append("\n卫星数 : ");sb.append(location.getSatelliteNumber());} else if (location.getLocType() &#61;&#61; BDLocation.TypeNetWorkLocation) {//网络定位sb.append("\n地址 : ");sb.append(location.getAddrStr());}mText.setText(sb.toString());//设置地图中心LatLng cenpt &#61; new LatLng(location.getLatitude(),location.getLongitude());//定义一个坐标点//定义地图状态MapStatus mMapStatus &#61; new MapStatus.Builder().target(cenpt).zoom(18).build();//定义MapStatusUpdate对象&#xff0c;以便描述地图状态将要发生的变化MapStatusUpdate mMapStatusUpdate &#61; MapStatusUpdateFactory.newMapStatus(mMapStatus);//改变地图状态mBaiduMap.setMapStatus(mMapStatusUpdate);//添加覆盖物LatLng point &#61; new LatLng(location.getLatitude(), location.getLongitude());//构建Marker图标BitmapDescriptor bitmap &#61; BitmapDescriptorFactory.fromResource(R.drawable.mark1);//构建MarkerOption&#xff0c;用于在地图上添加MarkerOverlayOptions option &#61; new MarkerOptions().position(point).icon(bitmap);//在地图上添加Marker&#xff0c;并显示mBaiduMap.addOverlay(option);}&#64;Overridepublic void onConnectHotSpotMessage(String s, int i) {//回调连接wifi是否是移动热点}}&#64;Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_request:if (mLocationClient !&#61; null ){mLocationClient.registerLocationListener(myListener);if(mLocationClient.isStarted()&#61;&#61;false){mLocationClient.start();}mLocationClient.requestLocation();}break;}}
}

布局文件&#xff1a;

<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"xmlns:tools&#61;"http://schemas.android.com/tools"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"android:orientation&#61;"vertical"tools:context&#61;"zsw.com.locationtest1.MainActivity" ><com.baidu.mapapi.map.MapView
android:layout_weight&#61;"1"android:id&#61;"&#64;&#43;id/bmapView"android:layout_width&#61;"fill_parent"android:layout_height&#61;"fill_parent"android:clickable&#61;"true" />
<Button
android:text&#61;"定位"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:id&#61;"&#64;&#43;id/btn_request" />
<TextView android:layout_weight&#61;"3"android:text&#61;"TextView"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"android:id&#61;"&#64;&#43;id/tv_text" />
LinearLayout>

manifest文件


<manifest xmlns:android&#61;"http://schemas.android.com/apk/res/android"package&#61;"zsw.com.locationtest1"><application
android:allowBackup&#61;"true"android:icon&#61;"&#64;mipmap/ic_launcher"android:label&#61;"&#64;string/app_name"android:supportsRtl&#61;"true"android:theme&#61;"&#64;style/AppTheme">
<service
android:name&#61;"com.baidu.location.f"android:enabled&#61;"true"android:process&#61;":remote">
service><meta-data
android:name&#61;"com.baidu.lbsapi.API_KEY"android:value&#61;"G8CCDPLQTEEuOEMpO8Ru90HDowmNUXUP" />
//key:开发者申请的Key<activity android:name&#61;".MainActivity"><intent-filter><action android:name&#61;"android.intent.action.MAIN" /><category android:name&#61;"android.intent.category.LAUNCHER" />intent-filter>activity>application><uses-permission android:name&#61;"android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name&#61;"android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name&#61;"android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name&#61;"android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name&#61;"android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name&#61;"android.permission.READ_PHONE_STATE" /><uses-permission android:name&#61;"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name&#61;"android.permission.INTERNET" /><uses-permission android:name&#61;"android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
manifest>

总结&#xff1a;如果发现自己定位到了非洲&#xff0c;如果Android版本是6.0以上&#xff0c;而因为定位权限是敏感权限&#xff0c;需要动态授权&#xff0c;如果过你用的是模拟器的话&#xff0c;也有可能会定位到非洲的&#xff0c;所以请用真机测试。


推荐阅读
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 本文详细解释了如何使用@IfProfileValue注解来检测Spring框架中的配置文件是否处于活动状态,并探讨其与@Profile和@activeProfiles的区别。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 本文介绍了ArcXML配置文件的分类及其在不同服务中的应用,详细解释了地图配置文件的结构和功能,包括其在Image Service、Feature Service以及ArcMap Server中的使用方法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
author-avatar
此恨缠绵_793
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有