2012-03-26 107 views
3

你好,我正在開發一個地圖視圖我試圖遵循的方式 我創建了一個「意圖」,通過點擊一個按鈕]。增加了許可和庫 。我創建了一個覆蓋項目。 。我模擬器的目標是爲GoogleApi 2.3.3。我MapView的關鍵是obdained和asigned到mapview.xmlMapView顯示灰色瓷磚地圖不顯示在Android谷歌API a 2.3.3

我看到與底部和地圖視圖CONTROLER一個谷歌的標誌圖:這裏是我的代碼

MapView.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <view android:id="@+id/mv" 
    class="com.google.android.maps.MapView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1" 
    android:clickable="true" 
    android:apiKey="046S_m5BQ43JIRtKiXQfldWwo2ddlU6dL6ca9SQ" 
    /> 
    </LinearLayout> 

MapViewActivity.java

public class MapviewActivity extends MapActivity 
    { private static double lat = 35.952967; // Temporary test values for lat/long 
    private static double lon = -83.929158 ; 
    private int latE6; 
    private int lonE6; 
    private MapController mapControl; 
private GeoPoint gp; 
private MapView mapView; 
private LocationManager locationManager; 
private MyOverlays itemizedoverlay; 
private MyLocationOverlay myLocationOverlay; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     //requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.mapview); 

     mapView = (MapView) findViewById(R.id.mv); 
     mapView.setBuiltInZoomControls(true); 
     mapView.setSatellite(true); 
     mapControl = mapView.getController(); 
     mapControl.setZoom(12); // Zoon 1 is world view 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
       0, new GeoUpdateHandler()); 

     myLocationOverlay = new MyLocationOverlay(this, mapView); 
     mapView.getOverlays().add(myLocationOverlay); 

     myLocationOverlay.runOnFirstFix(new Runnable() { 
      public void run() { 
       mapView.getController().animateTo(
         myLocationOverlay.getMyLocation()); 
      } 
     }); 

     Drawable drawable = this.getResources().getDrawable(R.drawable.point); 
     itemizedoverlay = new MyOverlays(this, drawable); 
     createMarker(); 
    } 



    public class GeoUpdateHandler implements LocationListener { 

     @Override 
     public void onLocationChanged(Location location) { 
      int lat = (int) (location.getLatitude() * 1E6); 
      int lng = (int) (location.getLongitude() * 1E6); 
      GeoPoint point = new GeoPoint(lat, lng); 
      createMarker(); 
      mapControl.animateTo(point); // mapController.setCenter(point); 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
    } 

    private void createMarker() { 
     GeoPoint p = mapView.getMapCenter(); 
     OverlayItem overlayitem = new OverlayItem(p, "", ""); 
     itemizedoverlay.addOverlay(overlayitem); 
     if (itemizedoverlay.size() > 0) { 
      mapView.getOverlays().add(itemizedoverlay); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     myLocationOverlay.enableMyLocation(); 
     myLocationOverlay.enableCompass(); 
    } 

    @Override 
    protected void onPause() { 
     super.onResume(); 
     myLocationOverlay.disableMyLocation(); 
     myLocationOverlay.disableCompass(); 
    } 




    // to set the satellite and traffic view 
    public boolean onKeyDown(int keyCode, KeyEvent e){ 
    if(keyCode == KeyEvent.KEYCODE_S){ 
     mapView.setSatellite(mapView.isSatellite()); 
     return true; 
    } else if(keyCode == KeyEvent.KEYCODE_T){ 
     mapView.setTraffic(mapView.isTraffic()); 
     mapControl.animateTo(gp); // To ensure change displays immediately 
    } 
    return(super.onKeyDown(keyCode, e)); 
}  
// Required method since class extends MapActivity 
protected boolean isRouteDisplayed() { 
    return true; // display a route 
} 

這裏是我的MyOverlays.java

public class MyOverlays extends ItemizedOverlay<OverlayItem> { 

     private static int maxNum = 5; 
     private OverlayItem overlays[] = new OverlayItem[maxNum]; 
     private int index = 0; 
     private boolean full = false; 
     private Context context; 
     private OverlayItem previousoverlay; 

     public MyOverlays(Context context, Drawable defaultMarker) { 
      super(boundCenterBottom(defaultMarker)); 
      this.context = context; 
     } 

     @Override 
     protected OverlayItem createItem(int i) { 
      return overlays[i]; 
     } 

     @Override 
     public int size() { 
      if (full) { 
       return overlays.length; 
      } else { 
       return index; 
      } 

     } 

     public void addOverlay(OverlayItem overlay) { 
      if (previousoverlay != null) { 
       if (index < maxNum) { 
        overlays[index] = previousoverlay; 
       } else { 
        index = 0; 
        full = true; 
        overlays[index] = previousoverlay; 
       } 
       index++; 
       populate(); 
      } 
      this.previousoverlay = overlay; 
     } 

     protected boolean onTap(int index) { 
      OverlayItem overlayItem = overlays[index]; 
      Builder builder = new AlertDialog.Builder(context); 
      builder.setMessage("This will end the activity"); 
      builder.setCancelable(true); 
      builder.setPositiveButton("I agree", new OkOnClickListener()); 
      builder.setNegativeButton("No, no", new CancelOnClickListener()); 
      AlertDialog dialog = builder.create(); 
      dialog.show(); 
      return true; 
     }; 

     private final class CancelOnClickListener implements 
       DialogInterface.OnClickListener { 
      public void onClick(DialogInterface dialog, int which) { 
       Toast.makeText(context, "You clicked yes", Toast.LENGTH_LONG) 
         .show(); 
      } 
     } 

     private final class OkOnClickListener implements 
       DialogInterface.OnClickListener { 
      public void onClick(DialogInterface dialog, int which) { 
       Toast.makeText(context, "You clicked no", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

我Android.manifest

<uses-sdk android:minSdkVersion="10" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 

    <application 
     android:icon="@drawable/drive_eat_icon" 
     android:label="@string/app_name" android:allowClearUserData="true"  android:debuggable="true"> 
     <activity 
      android:name=".MainScreen" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".DriveatmapActivity"></activity> 
     <activity android:name=".MapviewActivity"></activity> 
     <activity android:name=".FoodjointListActivity"></activity> 
     <activity android:name=".SubmitFormActivity"></activity>  
     <activity android:name=".MyOverlays"/> 
      <uses-library android:required="true" android:name="com.google.android.maps"></uses-library> 
</application> 

請建議做什麼。如果你需要任何代碼,請讓我知道。 我看到只有灰色瓷磚的谷歌地圖。

+0

我有互聯網和GPS設置在我的模擬器 – divaNilisha 2012-03-26 12:53:01

回答

0

用它來獲取有效的API key--

這是確切的path--

keytool -list -keystore "C:\Users\XYZ\.android\debug.keystore" 

cmd提示獲取GoogleMap API密鑰的MD5 fingureprint的總路徑----

,如果你使用eclipse then--

D:\eclipse\jre\bin>keytool -list -keystore "C:\Users\XYZ\.android\debug.keystore" 

MD5 fingurePrint看起來像this--

3E:F4:D6:E6:93:4D:BB:B8:62:3A:D6:0F:E0:FC:4C:65 

當u得到的fingurePrint數afterthat獲得API密鑰使用該鏈路 -

http://code.google.com/android/add-ons/google-apis/maps-api-signup.html

然後U將得到系統的API密鑰並能GE t時的地圖容易instread電網....

使用此鍵在您的MapView.xml ---

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <com.google.android.maps.MapView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:enabled="true" 
     android:apiKey="046S_m5BQ43JIRtKiXQfldWwo2ddlU6dL6ca9SQ" /> 

</LinearLayout> 
+0

我完全一樣。並得到了這個結果 – divaNilisha 2012-03-26 16:32:17

+0

現在你能夠顯示地圖嗎? – Hulk 2012-03-27 04:35:32

+0

不,我完全試過你的代碼,但沒有看到地圖 – divaNilisha 2012-03-27 06:58:57

1

//,而不是你的看法

//使用這個

<com.google.android.maps.MapView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map_view" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:enabled="true" 
     android:apiKey="046S_m5BQ43JIRtKiXQfldWwo2ddlU6dL6ca9SQ" /> 
+0

試過這種沒有工作,所以因爲我的API密鑰是有效的。你建議任何根佈局? – divaNilisha 2012-03-26 16:33:41