Android中级篇之基于百度地图Android SDK v3.4.0开发实现定位

我们先来看看我们需要哪些包:

这几个包都可以在百度地图API官网下载链接。
给一个百度地图API官网

package com.jzlg.excellentwifi.activity;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.location.LocationClientOption.LocationMode;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import com.jzlg.excellentwifi.R;import android.content.Context;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;public class MapActivity extends BaseActivity {    private Context context;    private MapView mMapView;    private BaiduMap mbaiduMap;    // 定位相关    private LocationClient mLocationClient;    private MyLocationListener mLocationListener;    private boolean isFirstIn = true;    private double mLatitude;//纬度    private double mLongitude;//经度    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext        // 注意该方法要在setContentView方法之前实现        SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.layout_map);        this.context = this;        // 初始化组件        initView();        // 初始化定位        initLocation();    }    // 定位初始化    private void initLocation() {        mLocationClient = new LocationClient(this);         // 定位监听器        mLocationListener = new MyLocationListener();        // 注册        mLocationClient.registerLocationListener(mLocationListener);        // 设置一些必要的配置        setLocationOption();        mLocationClient.start();    }    //定位设置    private void setLocationOption(){        LocationClientOption option = new LocationClientOption();        option.setCoorType("db09ll");// 返回的定位结果是百度经纬度,默认值gcj02        option.setAddrType("all");//返回的定位结果包含地址信息        option.setIsNeedAddress(true);// 位置,一定要设置,否则后面得不到地址        option.setOpenGps(true);// 打开GPS        option.setScanSpan(10000);// 多长时间进行一次请求        option.setLocationMode(LocationMode.Battery_Saving);// 网络定位优先        mLocationClient.setLocOption(option);// 使用设置    }    private void initView() {        // 获取地图控件引用        mMapView = (MapView) findViewById(R.id.map_bmapView);        mbaiduMap = mMapView.getMap();        // 设置地图放大缩小参数        MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);        mbaiduMap.setMapStatus(msu);    }    // 菜单    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_map, menu);        return true;    }    // 菜单点击方法    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        // 普通        case R.id.map_common:            mbaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);            break;        // 卫星        case R.id.map_site:            mbaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);            break;        // 实时        case R.id.map_traffic:            // 是否显示了实时地图            if (mbaiduMap.isTrafficEnabled()) {                mbaiduMap.setTrafficEnabled(false);                item.setTitle("实时交通off");            } else {                mbaiduMap.setTrafficEnabled(true);                item.setTitle("实时交通on");            }            break;        case R.id.map_location:            centerToMyLocation();            break;        default:            break;        }        return super.onOptionsItemSelected(item);    }    // 定位到我的位置    private void centerToMyLocation() {        LatLng latLng = new LatLng(mLatitude, mLongitude);        // 设置经纬度        MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);        mbaiduMap.animateMapStatus(msu);    }    @Override    protected void onDestroy() {        mLocationClient.stop();        mbaiduMap.setMyLocationEnabled(false);        // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理        mMapView.onDestroy();        mMapView = null;        super.onDestroy();    }    @Override    protected void onResume() {        // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理        mMapView.onResume();        super.onResume();    }    @Override    protected void onStart() {        // 开启定位允许        mbaiduMap.setMyLocationEnabled(true);        if (!mLocationClient.isStarted()) {            mLocationClient.start();        }        super.onStart();    }    @Override    protected void onStop() {        // 停止定位        mbaiduMap.setMyLocationEnabled(false);        mLocationClient.stop();        super.onStop();    }    @Override    protected void onPause() {        // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理        mMapView.onPause();        super.onPause();    }    private class MyLocationListener implements BDLocationListener {        // 定位成功之后的回调        @Override        public void onReceiveLocation(BDLocation location) {            MyLocationData data = new MyLocationData.Builder()// 经度                    .accuracy(location.getRadius())//                    .latitude(location.getLatitude())//                    .longitude(location.getLongitude())//                    .build();            //设置我的定位            mbaiduMap.setMyLocationData(data);            //取出经纬度            mLatitude = location.getLatitude();            mLongitude = location.getLongitude();            //是否是第一次定位            if (isFirstIn) {                LatLng latLng = new LatLng(location.getLatitude(),                        location.getLongitude());                // 设置经纬度                MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);                mbaiduMap.animateMapStatus(msu);                isFirstIn = false;            }            Toast.makeText(                    context,                    "定位成功:纬度" + location.getLatitude() + "经度:"                            + location.getLongitude() + "地址是:"                            + location.getAddrStr()+"城市是:"+location.getCity(), 0).show();        }    }}

以上是Activity的代码,下面就是我们的布局文件了
我取名是:layout_map.xml
当然了,大家可以自己取名

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >    <com.baidu.mapapi.map.MapView  android:id="@+id/map_bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /></LinearLayout>

那么说完了布局,我们来看看我们的清单文件AndroidManifest.xml是怎么写的,需要注意哪些事项,呈上我们的清单文件AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jzlg.excellentwifi" android:versionCode="1" android:versionName="1.0" >    <uses-sdk  android:minSdkVersion="8" android:targetSdkVersion="14" />    <!-- 以下是使用wifi访问网络所需的权限 -->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    <!-- 使用百度地图所需的权限 -->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <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="android.permission.INTERNET" />    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.BROADCAST_STICKY" />    <uses-permission android:name="android.permission.WRITE_SETTINGS" />    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <uses-permission android:name="android.permission.READ_LOGS" />    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.WAKE_LOCK" />    <application  android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >        <meta-data  android:name="com.baidu.lbsapi.API_KEY" android:value="qkGCDjO9o5Ey62NINwYra7nS" />        <!-- 注册MapActivity -->        <activity android:name="com.jzlg.excellentwifi.activity.MapActivity" >            <!-- 设置主活动 -->            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <!-- 注册LocationDemo -->        <activity android:name="com.jzlg.excellentwifi.activity.LocationDemo">        </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" />            </intent-filter>        </service>    </application></manifest>

这里需要注意的是,wifi访问网络所需的权限百度地图所需权限都需要,之所以我分了两个说明,但是需要全部写上,否则会定位失败!

y1笑而过的CSDN博客
y1笑而过的博客园
y1笑而过的新浪博客
y1笑而过的安卓巴士博客
y1笑而过的51CTO技术博客

更多相关文章

  1. Android百度地图开发
  2. Android--使用手机GPS获取经纬度
  3. android 百度地图获取左上角和右下角的坐标
  4. Android中本地图片资源以及视频录音资源的获取
  5. Android用RecyclerView实现动态添加本地图片
  6. 在Android中使用Google map
  7. android实现百度地图点击覆盖物(MyLocationOverlay)弹出自定义弹
  8. android ImageButton显示本地图片
  9. android使用百度地图获取自己所在的城市名

随机推荐

  1. Android获取SD卡总容量,可用大小,机身内存
  2. Unity与Android交互方案优化版
  3. Android(安卓)插件化
  4. Android绘图机制(二)--2D绘图基础
  5. Android——《Android第一行代码》10.6节
  6. Android平台上大长图(图片很大的那种)的加
  7. Android的简单应用(三)——为你的程序添加
  8. Android应用程序组件
  9. SMSBatchEditor: 基于规则的Android短信
  10. 2011初入游戏之道