数字签名是这个
包名在manifest文件中查看
之后我们就能拿到api_key了。
armeabi文件夹中文件和baidulbs_android.jar
添加到buildpath,你们懂得。
由于百度地图sdk要在Application中初始化,重写一个application并且在manifest中配置
重写的application只要做一件事就行:
@Override
public void onCreate() {
super.onCreate();
SDKInitializer.initialize(this);
}
配置服务和key
这里只贴关键代码,具体项目我会在稍后上传。
// 初始化并注册
mLocationClient = new LocationClient(getActivity().getApplicationContext());
mLocationClient.registerLocationListener(this);
startLocation = (Button)view.findViewById(R.id.addfence);
startLocation.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
LocationClientOption option = new LocationClientOption();
option.setLocationMode(tempMode);//设置定位模式
option.setCoorType(tempcoor);//返回的定位结果是百度经纬度,默认值gcj02国测局坐标系
option.setScanSpan(span);//设置发起定位请求的间隔时间为1000ms
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
if(startLocation.getText().equals(getString(R.string.startlocation))){
mLocationClient.start();
startLocation.setText(getString(R.string.stoplocation));
}else{
mLocationClient.stop();
startLocation.setText(getString(R.string.startlocation));
}
}
});
mLocationClient.start()
执行之后,结果会返回到回调方法
onReceiveLocation(BDLocation location)
要接收这个结果,需要实现BDLocationListener这个接口。
GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(this);
LatLng ptCenter=new LatLng(location.getLatitude(), location.getLongitude());
mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));
由于我使用了fragment,所以代码和普通的demo不一样。
这只是项目的部分代码,完整代码稍后上传。
源码:
package com.example.mainframework02.fragment;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.baidu.location.BDGeofence;
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.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.example.activity.R;
import com.example.map.LocationApplication;
@SuppressLint("NewApi")
public class MainTab02 extends Fragment implements BDLocationListener, OnGetGeoCoderResultListener
{
private LocationClient mLocationClient;
GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
private TextView LocationResult;
private Button startLocation;
private LocationMode tempMode = LocationMode.Hight_Accuracy;
// private String tempcoor=BDGeofence.COORD_TYPE_GCJ;
// private String tempcoor=BDGeofence.COORD_TYPE_BD09;//百度加密墨卡托坐标
private String tempcoor=BDGeofence.COORD_TYPE_BD09LL;//百度加密经纬度坐标
private int span=2000;
public static final int OPERATORS_TYPE_MOBILE=1;
public static final int OPERATORS_TYPE_TELECOMU = 3;
public static final int OPERATORS_TYPE_UNICOM = 2;
public static final int OPERATORS_TYPE_UNKONW = 0;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view=inflater.inflate(R.layout.main_tab_02, container, false);
// 初始化并注册
mLocationClient = new LocationClient(getActivity().getApplicationContext());
mLocationClient.registerLocationListener(this);
// mLocationClient = ((LocationApplication)getActivity().getApplication()).mLocationClient;
LocationResult = (TextView)view.findViewById(R.id.textView1);
// ((LocationApplication)getActivity().getApplication()).mLocationResult = LocationResult;
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(this);
startLocation = (Button)view.findViewById(R.id.addfence);
startLocation.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
InitLocation();
if(startLocation.getText().equals(getString(R.string.startlocation))){
mLocationClient.start();
startLocation.setText(getString(R.string.stoplocation));
}else{
mLocationClient.stop();
startLocation.setText(getString(R.string.startlocation));
}
}
});
return view;
}
private void InitLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(tempMode);//设置定位模式
option.setCoorType(tempcoor);//返回的定位结果是百度经纬度,默认值gcj02国测局坐标系
option.setScanSpan(span);//设置发起定位请求的间隔时间为1000ms
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
}
@Override
public void onGetGeoCodeResult(GeoCodeResult arg0) {
// TODO Auto-generated method stub
}
StringBuffer sb = new StringBuffer(256);
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
// TODO Auto-generated method stub
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Log.i("GeoLog", "GeoError");
return;
}
sb.append("\n详细地址信息 : ");
sb.append(result.getAddress()+"\n");
sb.append("\n省 : "
+result.getAddressDetail().province
+"\n市 : "
+result.getAddressDetail().city
+"\n区 : "
+result.getAddressDetail().district
+"\n街道 : "
+result.getAddressDetail().street
+"\n街道号码 : "
+result.getAddressDetail().streetNumber+"\n");
}
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
// StringBuffer sb = new StringBuffer(256);
sb.setLength(0);
sb.append("当前定位时间 : ");
sb.append(location.getTime());
sb.append("\n错误码 : ");
sb.append(location.getLocType());
sb.append("\n定位精度 : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation){
sb.append("\n捕捉到gps\n速度 : ");
sb.append(location.getSpeed());
sb.append("\n卫星数量 : ");
sb.append(location.getSatelliteNumber());
sb.append("\n方向 : ");
sb.append(location.getDirection());
LatLng ptCenter=new LatLng(location.getLatitude(), location.getLongitude());
mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));
// sb.append("\n省 : ");
// sb.append(location.getProvince());
// sb.append("\n市 : ");
// sb.append(location.getCity());
// sb.append("\n区 : ");
// sb.append(location.getDistrict());
// sb.append("\n详细地址信息 : ");
// sb.append(location.getAddrStr());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
sb.append("\n移动网络\n详细地址信息: ");
sb.append(location.getAddrStr());
sb.append("\n省 : ");
sb.append(location.getProvince());
sb.append("\n市 : ");
sb.append(location.getCity());
sb.append("\n区 : ");
sb.append(location.getDistrict());
//运营商信息
sb.append("\n运营商: ");
switch (location.getOperators()) {
case OPERATORS_TYPE_MOBILE:
sb.append("中国移动\n");
break;
case OPERATORS_TYPE_TELECOMU:
sb.append("中国电信\n");
break;
case OPERATORS_TYPE_UNICOM:
sb.append("中国联通\n");
break;
case OPERATORS_TYPE_UNKONW:
sb.append("未知运营商\n");
break;
default:
break;
}
}
logMsg(sb.toString());
Log.i("BaiduLocationApiDem", sb.toString());
}
@Override
public void onStop() {
// TODO Auto-generated method stub
mLocationClient.stop();
super.onStop();
}
@Override
public void onDestroy() {
mSearch.destroy();
super.onDestroy();
}
/**
* 显示请求字符串
* @param str
*/
public void logMsg(String str) {
try {
if (LocationResult != null)
LocationResult.setText(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}