百度地图定位功能实例

来源:互联网 发布:淘宝中秋节活动logo 编辑:程序博客网 时间:2024/04/27 19:58

注:百度地图key申请和其第三包请参照百度地图开发文档

这里只做简单的定位功能,具体的请自己按需求灵活的运用

(1)、添加显示地图和定位的权限

<uses-permission android:name="android.permission.GET_ACCOUNTS" />    <uses-permission android:name="android.permission.USE_CREDENTIALS" />    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />    <uses-permission android:name="android.permission.BROADCAST_STICKY" />    <uses-permission android:name="android.permission.WRITE_SETTINGS" />    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <!-- 这个权限用于访问GPS定位 -->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    <!-- 用于读取手机当前的状态 -->    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!-- 访问网络,网络定位需要上网 -->    <uses-permission android:name="android.permission.INTERNET" />    <!-- SD卡读取权限,用户写入离线定位数据 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <!-- 允许应用读取低级别的系统日志文件 -->    <uses-permission android:name="android.permission.READ_LOGS" />
(2)、设置百度Key和其Serivice(放在application内)

 <!-- 设置百度key -->        <meta-data            android:name="com.baidu.lbsapi.API_KEY"            android:value="T0gw6j4nD0U7mBm4kQ7B9l7W" />        <!-- 注册用于实现定位功能的服务 -->        <service            android:name="com.baidu.location.f"            android:enabled="true"            android:process=":remote" >        </service>
(3)界面布局

 <com.baidu.mapapi.map.MapView        android:id="@+id/mapView"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp" >        <Button            android:id="@+id/button1"            style="@style/buttonStyle"            android:background="@drawable/sele_bg"            android:onClick="click"            android:text="网络定位" />        <Button            android:id="@+id/button2"            style="@style/buttonStyle"            android:background="@drawable/sele_bg"            android:onClick="click"            android:text="GPS定位" />        <Button            android:id="@+id/button3"            style="@style/buttonStyle"            android:background="@drawable/sele_bg"            android:onClick="click"            android:text="高精定位" />        <Button            android:id="@+id/button4"            style="@style/buttonStyle"            android:background="@drawable/sele_bg"            android:onClick="click"            android:text="停止定位" />    </LinearLayout>
(4)MainActivity.java

public class MainActivity extends Activity {private LocationClient locClient;private LocationClientOption locopt;private MapView mapView;private BaiduMap mBaiduMap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.mapView);mBaiduMap = mapView.getMap();// 创建用于定位的客户端对象locClient = new LocationClient(getApplicationContext());// 创建用于封装定位相关参数的对象locopt = new LocationClientOption();// 设置定位的坐标系为“bd09ll”只有09是数字,其他是字母。如果坐标系设置的不对,则定位的结果就会由偏差locopt.setCoorType("bd09ll");// 设置定位的结果中是否包含该位置的地址locopt.setIsNeedAddress(true);/* * 百度地图的定位有3种方式: 1、LocationMode.Battery_Saving 省电模式(使用网络进行定位[WIFI和基站] * 室外) 2、LocationMode.Device_Sensors 仅设备传感器模式 (手机的GPS硬件模块 户外) * 3、LocationMode.Hight_Accuracy 高精度模式 (同时使用网络和GPS定位) */// 设置定位的模式locopt.setLocationMode(LocationMode.Battery_Saving);// 设置每隔多少毫秒发起定位请求locopt.setScanSpan(5000);locClient.setLocOption(locopt);// 注册监听器获取定位的结果并处理locClient.registerLocationListener(new BDLocationListener() {@Overridepublic void onReceiveLocation(BDLocation bdLocation) {double x = bdLocation.getLongitude();// 经度double y = bdLocation.getLatitude(); // 纬度String address = bdLocation.getAddrStr();// 地址String city = bdLocation.getCity();// 城市Toast.makeText(MainActivity.this,"城市:" + city + "\n地址:" + address + "\n经度:" + x+ "\n纬度:" + y, 0).show();/* * AlertDialog.Builder builder = new * AlertDialog.Builder(MainActivity.this); * builder.setMessage("经度:" + x + "\n纬度:" + y); * builder.create().show(); */MarkerOptions opt = new MarkerOptions();opt.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher));LatLng lng = new LatLng(y, x);// (纬度,经度)opt.position(lng);mBaiduMap.addOverlay(opt);// 设置地图中心为定位的地点mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(lng));}});}public void click(View v) {switch (v.getId()) {case R.id.button1:locClient.stop();Toast.makeText(this, "网络定位", 0).show();locopt.setLocationMode(LocationMode.Battery_Saving);locClient.start();break;case R.id.button2:locClient.stop();Toast.makeText(this, "GPS定位", 0).show();locopt.setLocationMode(LocationMode.Device_Sensors);locClient.start();break;case R.id.button3:locClient.stop();Toast.makeText(this, "高精定位", 0).show();locopt.setLocationMode(LocationMode.Hight_Accuracy);locClient.start();break;case R.id.button4:Toast.makeText(this, "停止定位", 0).show();locClient.stop();break;}}}





0 0