Android中的定位

百度地图API之根据经纬度查询地址信息

1.先获取当前的经纬度,再将经纬度转换成详细地址

LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE);

/* 
 * 参数一:  使用什么方式定位 , 基站 、WiFi, gps
 * 参数二:  过了多少时间,就更新位置
 * 参数三: 过了多少距离就更新位置
 */                 manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, new LocationListener() {

    //定位方式状态发生了变化
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

        Log.d(TAG, "onStatusChanged==="+provider);
    }

    //这种定位方式可用
    @Override
    public void onProviderEnabled(String provider) {
        Log.d(TAG, "onProviderEnabled==="+provider);
    }

    //这种定位方式不可用
    @Override
    public void onProviderDisabled(String provider) {
        Log.d(TAG, "onProviderDisabled==="+provider);

    }

    //位置发生了变化,就调用
    @Override
    public void onLocationChanged(final Location location){

    BMapManager mapManager = new BMapManager(getApplication());  
    // init方法的第一个参数需填入申请的API Key 
    mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);  

    //百度地图移动版API提供的搜索服务主要是通过初始化MKSearc类,
    //注册搜索结果的监听对象MKSearchListener来实现异步搜索服务。
     // 初始化MKSearch  
    MKSearch mkSearch = new MKSearch();
     mMKSearch.init(mapManager, new MySearchListener());
    String longitude = location.getLongitude(); //获取经度
    String latitude = location.getLatitude();  //获取纬度
    // 查询该经纬度值所对应的地址位置信息  
     mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude));
    }
}

2.自定义一个MySearchListener类,它实现MKSearchListener接口,然后通过实现接口中不同的回调方法,来获得对应的搜索结果.

public class MySearchListener implements MKSearchListener {  
  /** 
   * 根据经纬度搜索地址信息结果 
   *  
   * @param result 搜索结果 
   * @param iError 错误号(0表示正确返回) 
   */  
  @Override  
  public void onGetAddrResult(MKAddrInfo result, int iError) {  
    if (result == null) {  
        return;  
    }  
    StringBuffer sb = new StringBuffer();  
    // 经纬度所对应的位置  
    sb.append(result.strAddr).append("/n");  

    // 判断该地址附近是否有POI(Point of Interest,即兴趣点)  
    if (null != result.poiList) {  
        // 遍历所有的兴趣点信息  
        for (MKPoiInfo poiInfo : result.poiList) {  
sb.append("--------------------------------").append("/n");  
sb.append("名称:").append(poiInfo.name).append("/n");  
sb.append("地址:").append(poiInfo.address).append("/n");  
sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");  
sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");  
sb.append("电话:").append(poiInfo.phoneNum).append("/n");  
sb.append("邮编:").append(poiInfo.postCode).append("/n");  
// poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路  
sb.append("类型:").append(poiInfo.ePoiType).append("/n");  
      }  
   }  
      // 将地址信息、兴趣点信息显示在TextView上  
      addressTextView.setText(sb.toString());  
 }  

  /** 
   * 驾车路线搜索结果 
   *  
   * @param result 搜索结果 
   * @param iError 错误号(0表示正确返回) 
   */  
  @Override  
  public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {  
  }  

  /** 
   * POI搜索结果(范围检索、城市POI检索、周边检索) 
   *  
   * @param result 搜索结果 
   * @param type 返回结果类型(11,12,21:poi列表 7:城市列表) 
   * @param iError 错误号(0表示正确返回) 
   */  
  @Override  
  public void onGetPoiResult(MKPoiResult result, int type, int iError) {  
  }  

  /** 
   * 公交换乘路线搜索结果 
   *  
   * @param result 搜索结果 
   * @param iError 错误号(0表示正确返回) 
   */  
  @Override  
  public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {  
  }  

  /** 
   * 步行路线搜索结果 
   *  
   * @param result 搜索结果 
   * @param iError 错误号(0表示正确返回) 
   */  
  @Override  
  public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {  
  }  
}  

3.需要添加的权限

<!-- 访问网络的权限 -->  
<uses-permission android:name="android.permission.INTERNET" />  
<!-- 访问精确位置的权限 -->  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
<!-- 访问网络状态的权限 -->  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<!-- 访问WIFI网络状态的权限 -->  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<!-- 改变WIFI网络状态的权限 -->  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
<!-- 读写存储卡的权限 -->  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<!-- 读取电话状态的权限 -->  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值