今天做项目遇到要定位到当前的城市百度地图

本文介绍如何使用百度地图API实现Android应用中的城市定位功能。通过添加必要的库文件并配置权限,可以轻松获取用户的当前位置信息。

最近写的一个新闻客户端要定位到当前的城市,所以就要用到百度地图,自己研究了一下,还不是很深入,只是简单的定位到当前的城市。

首先要下载两个库,一个是:locSDK_6.12.jar 和一个动态库liblocSDK6a.so 注意,动态库要放在libs/armeabi文件夹下,(下载资源,可以去网上下载即可)

然后就是:写代码。

声明: public MyLocationListener mMyLocationListener;
   private LocationClient mLocationClient;
   private LocationClientOption.LocationMode tempMode = LocationClientOption.LocationMode.Battery_Saving;

oncreate()方法里:

            tvchengshi=(TextView)findViewById(R.id.tvchengshi);
            mLocationClient = new LocationClient(this);
    mMyLocationListener = new MyLocationListener();
    mLocationClient.registerLocationListener(mMyLocationListener);
    initLocation();
    mLocationClient.start();

initLocation():

            private void initLocation() {
       LocationClientOption option = new LocationClientOption();
       option.setLocationMode(tempMode);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
       String tempcoor = "gcj02";
       option.setCoorType(tempcoor);//可选,默认gcj02,设置返回的定位结果坐标系,
       option.setScanSpan(0);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
       option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
       option.setOpenGps(true);//可选,默认false,设置是否使用gps
       option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
       option.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
       option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
       option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天                  安门附近”
       option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
       mLocationClient.setLocOption(option);
   }

最后实现位置回调:

             public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
//Receive Location
            Location lc = Location.getInstance();
            lc.addressStr=location.getAddrStr();
            lc.province = location.getProvince();
            System.out.println("--定位--->>>"+lc.province);
            tvchengshi.setText(lc.province);
            lc.city = location.getCity();
           // tvchengshi.setText(lc.city);
            lc.street = location.getStreet();
            lc.district = location.getDistrict();
            lc.latitude = location.getLatitude();
            lc.longitude = location.getLongitude();
            System.out.println("-----定位>>"+lc.toString());
            mLocationClient.stop();
}
    }


注意上面的 Location lc是自己定义的一个实体类,

属性有:

 private static final Location LOCATION = new Location();
    /**
     * 详细地址信息
     */
    public String addressStr;
    /**
     * 省
     */
    public String province;
    /**
     * 城市
     */
    public String city;
    /**
     * 区/县
     */
    public String district;
    /**
     * 街道
     */
    public String street;
    /**
     * 经度
     */
    public double longitude;
    /**
     * 纬度
     */
    public double latitude;


    public Area area;


    private Location() {
    }


    public static Location getInstance() {
        return LOCATION;


    }


    @Override
    public String toString() {
        return "Location{" +
                "addressStr='" + addressStr + '\'' +
                ", province='" + province + '\'' +
                ", city='" + city + '\'' +
                ", district='" + district + '\'' +
                ", street='" + street + '\'' +
                ", longitude=" + longitude +
                ", latitude=" + latitude +
                ", area=" + area +
                '}';
    }




切记最后把定位关闭:

@Override
protected void onStop() {
// TODO Auto-generated method stub
mLocationClient.stop();
super.onStop();
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
mLocationClient.unRegisterLocationListener(mMyLocationListener);
super.onDestroy();
}



剩下的是在清单文件中的配置了:

 <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>

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value=""/>  此处填上自己的key 




权限: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<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" />  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
<uses-permission android:name="android.permission.READ_LOGS" /> 

截止到目前,已经完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值