為了方便使用唇聘,我把百度地圖定位功能再做一次封裝秕重。使用方法如下:
BaiduLocation.getLocation(activity);
BaiduLocation.setMyLocationListener(new BaiduLocation.MyLocationListener(){
public void myLocatin(double mylongitude,double mylatitude){
}
});
封裝后的百度定位類BaiduLocation:
import android.content.Context;
import android.util.Log;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
/**
* 百度定位 用法: BaiduLocation.getLocation(activity);
* BaiduLocation.setMyLocationListener(new BaiduLocation.MyLocationListener(){
* public void myLocatin(double mylongitude,double mylatitude){
*
* } });
*
* <!-- 百度定位回調 -->
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 這個權限用于進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<!-- 這個權限用于訪問GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<!-- 這個權限用于獲取wifi的獲取權限合冀,wifi信息會用來進行網絡定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
* @author 王家宇 2016.1.15
*
*/
public class BaiduLocation {
/**
* 經度
*
*/
public static double mylongitude = -1.0;
/**
* 緯度
*
*/
public static double mylatitude = -1.0;
/**
* 城市
*/
public static String myCity = null;
/**
* 街道
*/
public static String myCityadd = null;
/**
* 回調經緯度方法
*
* @param myLocationListener
*/
public static void setMyLocationListener(MyLocationListener myLocationListener) {
BaiduLocation.myLocationListener = myLocationListener;
}
public static MyLocationListener myLocationListener;
/**
* 回調經緯度的接口定義
*
* @author Administrator
*
*/
public static interface MyLocationListener {
public void myLocatin(double mylongitude, double mylatitude, String city, String street);
};
/**
* 獲取當前經緯度
*
* @param activity
*/
public static void getLocation(Context context) {
final LocationClient locationClient = new LocationClient(context);
// 設置定位條件
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 是否打開GPS
option.setCoorType("bd09ll"); // 設置返回值的坐標類型蚤氏。
option.setPriority(LocationClientOption.NetWorkFirst); // 設置定位優(yōu)先級
option.setProdName("zhongchengbus"); // 設置產品線名稱峦树。強烈建議您使用自定義的產品線名稱卵洗,方便我們以后為您提供更高效準確的定位服務。
option.setScanSpan(5000); // 設置定時定位的時間間隔心肪。單位毫秒
option.setAddrType("all");// 顯示所有信息锭亏,街道
locationClient.setLocOption(option);
// 注冊位置監(jiān)聽器
locationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
if (location == null) {
return;
}
Log.d("baidulocation", "baidulocation1");
// sb.append("Time : ");
// sb.append(location.getTime());
// sb.append("\nError code : ");
// sb.append(location.getLocType());
// sb.append("\nLatitude : ");
// sb.append(location.getLatitude());
// sb.append("\nLontitude : ");
// sb.append(location.getLongitude());
// sb.append("\nRadius : ");
// sb.append(location.getRadius());
// if (location.getLocType() == BDLocation.TypeGpsLocation){
// sb.append("\nSpeed : ");
// sb.append(location.getSpeed());
// sb.append("\nSatellite : ");
// sb.append(location.getSatelliteNumber());
// } else
if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
// sb.append("\nAddress : ");
// sb.append(location.getAddrStr());
String district = location.getAddress().district;
myCityadd = location.getAddrStr();
myCity = location.getCity();
mylongitude = location.getLongitude();
mylatitude = location.getLatitude();
Log.d("baidulocation", mylongitude+"\n"+mylatitude+"\n"+ myCity+"\n"+district);
// 經緯度
if (myLocationListener != null) {
myLocationListener.myLocatin(mylongitude, mylatitude, myCity, district);
locationClient.stop();
}
}
}
});
locationClient.start();
/*
* 當所設的整數值大于等于1000(ms)時,定位SDK內部使用定時定位模式硬鞍。調用requestLocation(
* )后慧瘤,每隔設定的時間,定位SDK就會進行一次定位固该。如果定位SDK根據定位依據發(fā)現位置沒有發(fā)生變化锅减,就不會發(fā)起網絡請求,
* 返回上一次定位的結果伐坏;如果發(fā)現位置改變怔匣,就進行網絡請求進行定位,得到新的定位結果。
* 定時定位時每瞒,調用一次requestLocation金闽,會定時監(jiān)聽到定位結果。
*/
locationClient.requestLocation();
Log.d("baidulocation", "baidulocation");
}
}
注意添加權限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 這個權限用于進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<!-- 這個權限用于訪問GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<!-- 這個權限用于獲取wifi的獲取權限剿骨,wifi信息會用來進行網絡定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
百度定位回調service
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
注意的是僅僅使用定位功能不需要key代芜。