2013-01-11 360 views
0

看到幾個論壇和教程谷歌地圖Android版之後,並且我有這個谷歌地圖不顯示在屏幕

public class MapsActivity extends MapActivity { 

MapView mapView; 
MapController mc; 
GeoPoint p; 

class MapOverlay extends com.google.android.maps.Overlay{ 
    @Override 
    public boolean draw(Canvas canvas, MapView mapView, 
      boolean shadow, long when){ 
     super.draw(canvas, mapView,shadow); 
     Point screenPts = new Point(); 
     mapView.getProjection().toPixels(p,screenPts); 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
     canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); 
     return true; 
    } 

    public boolean onTouchEvent(MotionEvent event, MapView mapView){ 
     if(event.getAction()==1) { 
      p=mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY()); 
      Toast.makeText(getBaseContext(), 
      p.getLatitudeE6()/1E6 + ","+p.getLongitudeE6()/1E6, 
      Toast.LENGTH_SHORT).show(); 
      mc.animateTo(p); 
      return false; 
     } else return false; 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    mapView=(MapView) findViewById(R.id.mapView); 
    LinearLayout zoomLayout=(LinearLayout)findViewById(R.id.zoom); 
    @SuppressWarnings("deprecation") 
    View zoomView=mapView.getZoomControls(); 
    zoomLayout.addView(zoomView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT)); 
    mapView.displayZoomControls(true); 
    mc=mapView.getController(); 
    String coordinates[]={"51.986367","5.666304"}; 
    double lat=Double.parseDouble(coordinates[0]); 
    double lng=Double.parseDouble(coordinates[1]); 
    p=new GeoPoint((int)(lat*1E6),(int)(lng*1E6)); 
    mc.animateTo(p); 
    mc.setZoom(18); 
    MyLocationOverlay mMyLocationOverlay=new MyLocationOverlay(this,mapView); 
    mMyLocationOverlay.enableMyLocation(); 
    mapView.getOverlays().add(mMyLocationOverlay); 
    mapView.invalidate(); 
} 

@Override 
protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
} 

} 

而且我修改這樣的清單,根據谷歌開發者

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<permission 
    android:name="tovar.testing.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature"/> 
<uses-permission android:name="tovar.testing.permission.MAPS_RECEIVE"/> 
<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true"/>  

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <uses-library android:name="com.google.android.maps"/> 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="AIzaSyAYLFPye3YL3HgXnPHGuoDCgYjrGJ4VtkA"/> 
    <activity 
     android:name=".MapsActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

我也加入API密鑰的佈局

<com.google.android.maps.MapView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mapView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:apiKey="AIzaSyAYLFPye3YL3HgXnPHGuoDCgYjrGJ4VtkA" 
    android:clickable="true" 
    android:enabled="true" 
    class="com.google.android.gms.maps.MapFragment"/> 

它運行,但地圖沒有出現在屏幕上,有什麼建議嗎?

+0

使用自己的ketstore值實際android.or創建APK運行它。 – Hemant

+0

是你的API密鑰還是你在網上找到的? – VinceFR

+0

是的,這是我的API密鑰 – vctr47

回答

0

可能不得不改變你的代碼幾件事情需要努力:

1)您的類的地圖活動應該擴展FragmentActivity

2)XML代碼應該是這樣的

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment"/> 

3)你的清單文件應當具有該信息的再檢查:

<meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="YOUR_API_KEY"/> 

幫助鏈接:http://wptrafficanalyzer.in/blog/google-maps-in-android-application-with-new-google-maps-android-api-v2-using-supportmapfragment/

http://wptrafficanalyzer.in/blog/showing-current-location-in-google-maps-using-api-v2-with-supportmapfragment/

+0

我會試試看,謝謝 – vctr47

0

嘿,爲什麼在你的清單文件

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<permission 
    android:name="tovar.testing.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature"/> 
<uses-permission android:name="tovar.testing.permission.MAPS_RECEIVE"/> 
<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true"/>  

你已經寫了所有的代碼在地圖V1和企圖增加所需要的地圖V2的權限,需要下面的東西。如果你想構建一個Maps Activity V2,那麼完全省略V1。

更重要的是你的MapView的標籤是很大的錯誤

有沒有這樣的標記接受類=「..... MapFragment」。

我建議你看只有Maps V2,並着手開發

+0

哪些部分應該省略? – vctr47

+0

@ vctr47你混合了V1和V2代碼。 Maps V2中沒有apiKey屬性。您必須在Manifest文件中設置API密鑰,因爲GridtestMail回答了您的問題。 – TNR