当前位置:编程学习 > wap >>

android百度地图定位没法刷新是什么原因?求解

这是应用刚启动时的界面:


这个图是位置更新后的模拟器显示:


核心代码:
package com.mackey.gps_wifi;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.MKEvent;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.mackey.MyMenu;
import com.mackey.MyOverlay;

public class MainActivity extends MapActivity {

/*
 * 地图控件
 */
private MapView mapView = null;

/*
 *百度地图的管理类 
 */
private BMapManager bMapManager = null ;

/*
 * 百度地图密钥
 */
private static final String BAIDU_MAP_API_KEY = "7D99DC6FE7F9BB79DA8C166CD76FBD812B3A3F9A";

/*
 * 在Log中用于标识BMapManager即充当Map的Key作用
 */
private String TAG = "bMapManager";

/*
 *MapView的控制器 
 */
private MapController mapController = null;

/*
 * 定位SDK的核心类
 */
private LocationClient locationClient = null;

/*
 * 为客户端服务选项的主类
 */
private LocationClientOption locationClientOption = null;

/*
 *我所处位置的 纬度
 */
private double myLocationLatitude = 0;

/*
 * 我所处位置的经度
 */
private double myLocationLongitude = 0;

/*
 * 图层的数目
 */
private int size = 0;

/*
 * 用于显示本地位置的详细信息
 */
private TextView textView = null;

/*
 * 我的图层,用于在地图上标识我所处的位置
 */
private  MyOverlay myOverlay = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView)findViewById(R.id.textView);
initBMapManager();
initMapView();
setLocationClientOption();
locationClient.registerLocationListener(new MyBDLoactionListener());
locationClient.start();
}

/*
 * LocationOption的设置即相关服务的设置
 */
private void setLocationClientOption() {
locationClientOption = new LocationClientOption();
locationClientOption.disableCache(true);
locationClientOption.setOpenGps(true);//开启GPS
locationClientOption.setCoorType("bd09ll");
locationClientOption.setProdName("GPS_WIFI");
locationClientOption.setPriority(LocationClientOption.GpsFirst);
locationClientOption.setAddrType("all");
locationClient = new LocationClient(MainActivity.this);
locationClient.setLocOption(locationClientOption);
}

/*
 * 用于初始化地图
 */
private void initMapView() {
mapView = (MapView)findViewById(R.id.mapView);
size = mapView.getOverlays().size();
mapView.setBuiltInZoomControls(true);
mapView.setBuiltInZoomControls(true);//设置启用内置的缩放控件
mapView.setDrawOverlayWhenZooming(true);//设置缩放的过程中显示图层
mapController = mapView.getController();
GeoPoint geoPoint = new GeoPoint((int)(32.05000*1E6),(int)(118.78333*1E6));
mapController.setCenter(geoPoint);
mapController.setZoom(16);
}

/*
 * 用于初始化BMapManager
 */
private void initBMapManager(){
bMapManager = new BMapManager(MainActivity.this);
boolean result ;
result = bMapManager.init(BAIDU_MAP_API_KEY,new MKGeneralListener() {

@Override
public void onGetPermissionState(int error) {

if (error == MKEvent.ERROR_NETWORK_CONNECT) {
                 Toast.makeText(MainActivity.this, "您的网络出错啦!", Toast.LENGTH_LONG).show();
             } else if (error == MKEvent.ERROR_NETWORK_DATA) {
                 Toast.makeText(MainActivity.this, "输入正确的检索条件!", Toast.LENGTH_LONG).show();
             }

}

@Override
public void onGetNetworkState(int error) {

if (error == MKEvent.ERROR_PERMISSION_DENIED) {

                Toast.makeText(MainActivity.this, "您的授权Key出错!", Toast.LENGTH_LONG).show();
            }
}
});

if(!result){

  if (!result) {
  
            Toast.makeText(MainActivity.this, "初始化地图引擎失败!", Toast.LENGTH_LONG).show();
        } else {
            Log.i(TAG, "地图引擎初始化成功!");
        }
}

initMapActivity(bMapManager);
}

/*
 *用于创建Menu,即手机的菜单选项
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0, MyMenu.GENERALVIEW, 1, R.string.GeneralView);
menu.add(1, MyMenu.SATELLITEVIEW, 1, R.string.SATELLITEVIEW);
menu.add(2, MyMenu.MYLOCATION, 1, R.string.about);
menu.add(3, MyMenu.INQUIRY, 1, R.string.inquiry);
return super.onCreateOptionsMenu(menu);
}

/*
 * 用于监听Menu中选项的触发,给出相应的反映即行为
 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int k = item.getItemId();
switch(k){
case MyMenu.GENERALVIEW:mapView.setSatellite(false);break;
case MyMenu.SATELLITEVIEW:mapView.setSatellite(true);break;
case MyMenu.MYLOCATION:{
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putCharSequence("MYLOCATION",textView.getText());
intent.putExtras(bundle);
intent.setClass(MainActivity.this,MyLocationActivity.class);
MainActivity.this.startActivity(intent);break;
}
case MyMenu.INQUIRY:{
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse("http://map.baidu.com/");
intent.setData(uri);        
startActivity(intent);break;
}

}
return super.onOptionsItemSelected(item);
}


@Override
protected boolean isRouteDisplayed() {

return false;
}

/*
 * MapActivity的生命周期函数,必须覆写。
 * 如果不覆写这些函数,即便有百度地图的
 * Key也是无法显示百度地图的。即也就是说明
 * 要想显示百度地图需要两个条件:1.百度地图Key
 * 2.覆写MapActivity的生命周期函数。
 */
protected void onDestroy() {

if(bMapManager!=null){
bMapManager.destroy();
bMapManager = null;
}
super.onDestroy();
}

@Override
protected void onPause() {

if(bMapManager!=null){
super.onPause();
bMapManager.stop();
}

}

@Override
protected void onResume() {

if(bMapManager!=null){
super.onResume();
    bMapManager.start();
  
}

}

/*
 * 实现位置监听,实时缓存我的位置
 */
public class MyBDLoactionListener implements BDLocationListener{

@Override
public void onReceiveLocation(BDLocation bdLocation) {
if(bdLocation==null){
return;
}else{

markLocationOnMap(bdLocation);
showMyLocation(bdLocation);
}
}

@Override
public void onReceivePoi(BDLocation arg0) {

}
}

/*
 * 在地图上标出我所处的位置
 */
private void markLocationOnMap(BDLocation bdLocation) {

myLocationLatitude = bdLocation.getLatitude();
myLocationLongitude = bdLocation.getLongitude();
GeoPoint  geoPoint = new GeoPoint((int)(myLocationLatitude* 1E6),(int)(myLocationLongitude* 1E6));
mapController.setZoom(16);  
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.point_where);
    myOverlay = new MyOverlay(null, mapView, bitmap,geoPoint,size);
    myOverlay.addMyOverlay(myOverlay, bitmap,geoPoint); 
    //mapController.animateTo(geoPoint);
}

/*
 * 用于显示我所处位置的详细信息,不过为了使得界面
 * 更人性化,这里采用先使得TextView不显示,待用户
 * 出发相应Menu菜单要求显示时才会显示。
 */
private void showMyLocation(BDLocation bdLocation) {

StringBuffer sb = new StringBuffer(256);
        sb.append(" time : ");
        sb.append(bdLocation.getTime());
        sb.append("\n error code : ");
        sb.append(bdLocation.getLocType());
        sb.append("\n latitude : ");
        sb.append(bdLocation.getLatitude());
        sb.append("\n lontitude : ");
        sb.append(bdLocation.getLongitude());
       
        // 判断是否有定位精度半径
        if(bdLocation.hasRadius()){
            sb.append("\n radius : ");
            sb.append(bdLocation.getRadius());
        }
        if (bdLocation.getLocType()==BDLocation.TypeGpsLocation){
            
         if (bdLocation.hasSpeed()){
                sb.append("\n speed : ");
                sb.append(bdLocation.getSpeed());
            }

            if (bdLocation.hasSateNumber()) {
                sb.append("\n satellite : ");
                sb.append(bdLocation.getSatelliteNumber());
            }
        } else if (bdLocation.getLocType()==BDLocation.TypeNetWorkLocation) {
          
         // 获取反地理编码。 只有使用网络定位的情况下,才能获取当前位置的反地理编码描述。详细参见百度开发者中心百度定位API
            if (bdLocation.hasAddr()) {
                
             String address = bdLocation.getAddrStr();
                sb.append("\n addr : ");
                sb.append(address);
            }
            
        }
        textView.setText(sb);
}
}
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,