开发的map软件在模拟器上能正常显示,在手机上显示不了

开发的地图软件在模拟器上能正常显示,在手机上显示不了本帖最后由 chenyu0748 于 2010-12-08 02:33:17 编

开发的地图软件在模拟器上能正常显示,在手机上显示不了
本帖最后由 chenyu0748 于 2010-12-08 02:33:17 编辑 这是一个获取当前位置坐标和地图的demo,在模拟器上能够正常显示地图,但在手机上运行只能获取到坐标,而无法显示地图。 

使用不同的手机分别用wifi连接和GPRS连接好像都不行,但手机使用自带的Google地图软件能够显示地图。 

我使用的Google map api key是使用debug.keystore生成的MD5码,和这个有关系吗? 

我觉得问题有这些可能: 
1.手机网络连接问题 
2.没有使用恰当的api key 

有哪位前辈遇到过这种问题并成功解决的吗?希望能得到指点。 

附上demo的源码 


package com.studio.android.chp08.ex02;

import java.util.List;

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;

public class CurrentLocationWithMap extends MapActivity {

    MapView map;
    
    MapController ctrlMap;
    Button inBtn;
    Button outBtn;
    ToggleButton switchMap; 
    
    @Override
protected boolean isRouteDisplayed() {
return false;
}

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        map = (MapView)findViewById(R.id.myMapView); 
        List<Overlay> overlays = map.getOverlays();
        MyLocationOverlay myLocation = new MyLocationOverlay(this,map);
        myLocation.enableMyLocation();
        overlays.add(myLocation);
        
        ctrlMap = map.getController();
        inBtn = (Button)findViewById(R.id.in);
        outBtn = (Button)findViewById(R.id.out);
        switchMap = (ToggleButton)findViewById(R.id.switchMap);
        
        OnClickListener listener = new OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId()) {


                case R.id.in:
                    ctrlMap.zoomIn();
                    break;
                case R.id.out:
                    ctrlMap.zoomOut();
                    break;
                default:
                    break;
                }
            }
        };
        inBtn.setOnClickListener(listener);
        outBtn.setOnClickListener(listener);
        
        //=======================================
        
        switchMap.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton cBtn, boolean isChecked) {
                if (isChecked == true) {
                    map.setSatellite(true);
                } else {
                    map.setSatellite(false);
                }
            }
        });
        
        LocationManager locationManager;
        String context = Context.LOCATION_SERVICE;
        locationManager = (LocationManager)getSystemService(context);
        //String provider = LocationManager.GPS_PROVIDER;
        
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        String provider = locationManager.getBestProvider(criteria, true);


        
        Location location = locationManager.getLastKnownLocation(provider);
        updateWithNewLocation(location);
        locationManager.requestLocationUpdates(provider, 2000, 10,
        locationListener);
    }
   private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
    updateWithNewLocation(location);
    }
    public void onProviderDisabled(String provider){
    updateWithNewLocation(null);
    }
    public void onProviderEnabled(String provider){ }
    public void onStatusChanged(String provider, int status,
    Bundle extras){ }
    };
    private void updateWithNewLocation(Location location) {
    String latLongString;
    TextView myLocationText;
    myLocationText = (TextView)findViewById(R.id.myLocationText);
    if (location != null) {
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        latLongString = "纬度:" + lat + "\n经度:" + lng;
        
        ctrlMap.animateTo(new GeoPoint((int)(lat*1E6),(int)(lng*1E6)));
    } else {
        latLongString = "无法获取地理信息";
    }
    myLocationText.setText("您当前的位置是:\n" +
    latLongString);
        
    }
}



[解决办法]
debug的key也可以真机上用,但是只能通过调试的方式运行。
每个机器的debug模式下的key也不一样