简体   繁体   中英

Google maps won't show

I am making an application that displays a google map, but the problem is: that it doesn't show maps/satellite/anything. It is just a big grey area. I've added the internet permission as well as the library and google maps API key, how can I fix this??? The code that I am using:

MapTabView.java:

public class MapTabView extends MapActivity implements OnClickListener {
public static final String TAG = "GoogleMapsActivity";
private MapView mapView;
private LocationManager locationManager;
Geocoder geocoder;
Location location;
LocationListener locationListener;
CountDownTimer locationtimer;
MapController mapController;
MapOverlay mapOverlay = new MapOverlay();
EditText SearchInput;
Button SearchButton;

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    onTabStart();
    initComponents();
    mapView.setBuiltInZoomControls(true);
    mapView.setSatellite(true);
    mapController = mapView.getController();
    mapController.setZoom(16);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    if (locationManager == null) {
        Toast.makeText(MapTabView.this,
                "Location Manager Not Available", Toast.LENGTH_SHORT)
                .show();
        return;
    }
    location = locationManager
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if (location == null)
        location = locationManager
                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    if (location != null) {
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        Toast.makeText(MapTabView.this,
                "Location Are" + lat + ":" + lng, Toast.LENGTH_SHORT)
                .show();
        GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
        mapController.animateTo(point, new Message());
        mapOverlay.setPointToDraw(point);
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);
    }
    locationListener = new LocationListener() {
        @Override
        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
        }

        @Override
        public void onProviderEnabled(String arg0) {
        }

        @Override
        public void onProviderDisabled(String arg0) {
        }

        @Override
        public void onLocationChanged(Location l) {
            location = l;
            locationManager.removeUpdates(this);
            if (l.getLatitude() == 0 || l.getLongitude() == 0) {
            } else {
                double lat = l.getLatitude();
                double lng = l.getLongitude();
                Toast.makeText(MapTabView.this,
                        "Location Are" + lat + ":" + lng,
                        Toast.LENGTH_SHORT).show();
            }
        }
    };
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 1000, 10f, locationListener);
    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER, 1000, 10f, locationListener);
    locationtimer = new CountDownTimer(30000, 5000) {
        @Override
        public void onTick(long millisUntilFinished) {
            if (location != null)
                locationtimer.cancel();
        }

        @Override
        public void onFinish() {
            if (location == null) {
            }
        }
    };
    locationtimer.start();
}

private void onTabStart() {
    // TODO Auto-generated method stub
    TabHost tabHost=(TabHost)findViewById(R.id.tabHost);
    tabHost.setup();

    TabSpec spec2=tabHost.newTabSpec("Tab 1");
    spec2.setIndicator("Map");
    spec2.setContent(R.id.tab1);

    TabSpec spec3=tabHost.newTabSpec("Tab 2");
    spec3.setIndicator("Search");
    spec3.setContent(R.id.tab2);

    tabHost.addTab(spec2);
    tabHost.addTab(spec3);
    tabHost.setCurrentTab(1);
    SearchButton = (Button)findViewById(R.id.SearchButton);
    SearchButton.setOnClickListener(this);

}
public void onClick(View src) {
    switch(src.getId()) {
    case R.id.SearchButton:
        SearchInput = (EditText)findViewById(R.id.SearchInput);
        String SearchInputText = "";
        SearchInputText = SearchInput.getText().toString();
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0q=" + SearchInputText));
        startActivity(intent);
        break;
    }
}

public MapView getMapView() {
    return this.mapView;
}

private void initComponents() {
    mapView = (MapView) findViewById(R.id.mapview);
}

@Override
protected boolean isRouteDisplayed() {
    return false;
}

class MapOverlay extends Overlay {
    private GeoPoint pointToDraw;

    public void setPointToDraw(GeoPoint point) {
        pointToDraw = point;
    }

    public GeoPoint getPointToDraw() {
        return pointToDraw;
    }

    @Override
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
            long when) {
        super.draw(canvas, mapView, shadow);

        Point screenPts = new Point();
        mapView.getProjection().toPixels(pointToDraw, screenPts);

        Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                R.drawable.pinblue);
        canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null);
        return true;
    }
}

}

Main.xml:

<?xml version="1.0" encoding="utf-8"?>

<TabHost android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tabHost"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<TabWidget
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@android:id/tabs"
/>
 <FrameLayout
 android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/tabcontent"
 >



 <LinearLayout
     android:id="@+id/tab1"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical"
     android:paddingTop="60px" >


     <TextView
         android:id="@+id/txt2"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="Map" />

     <com.google.android.maps.MapView
         android:id="@+id/mapview"
         android:layout_width="fill_parent"
         android:layout_height="match_parent"
         android:layout_weight="1.12"
         android:apiKey="09AeOreJeLtH579e3G74Icfle664gxXhbfh1O7Q"
         android:clickable="true" >
     </com.google.android.maps.MapView>
 </LinearLayout>


  <LinearLayout
      android:id="@+id/tab2"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical"
      android:paddingTop="60px" >

 <TextView
     android:id="@+id/txt3"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="Search for gokart tracks" />

 <LinearLayout
     android:id="@+id/linearLayout1"
     android:layout_width="match_parent"
     android:layout_height="match_parent" >

     <EditText
         android:id="@+id/SearchInput"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="10.05" >

         <requestFocus />
     </EditText>

     <Button
         android:id="@+id/SearchButton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:text="@android:string/search_go" />
 </LinearLayout>


 <TextView
     android:id="@+id/textView1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/GoogleMapOpenText" />

 </LinearLayout>

 </FrameLayout>

</TabHost>

Whenever Google Maps doesn't appear for me, it ends up being one of these issues:

  1. I generated my hash, and thus the API key, off the wrong keystore for the project--I signed the app with one keystore and generated the hash with a different one.
  2. I didn't include the API key
  3. I didn't sign the APK and install that on the phone to test it. It has to be a signed APK, or it won't work.

Also, you didn't specify what phone you're using to test--I don't think it will run on the emulator, it has to be a phone.

在手机上安装SIGNED APK之前,我遇到了同样的问题

Make sure your reference is correct.

<script> src="http://maps.googleapis.com/maps/api/js?sensor=false" type="text/javascript" </script>

Is what you need to include. Not sure what your code is, but I do mine like this:

    function init() {
        var mapOptions = {
            //include all of the map's information here
            center: new google.maps.LatLng(lat_value,lng_value),
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById(mapHTMLLocationString), mapOptions);
    }

Consult the Google maps reference to see other available map options. I think that center and mapTypeId are the only required options to get a map.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM