簡體   English   中英

Newbee-Android應用程序無法顯示Google Map

[英]Newbee - Android app can't show google map

我正在開發一個用於研究Android的簡單應用。 該應用使用國家,城市和機場名稱作為過濾器查詢SQLite數據庫,並獲取該數據庫的ICAO代碼。 因此,該應用程序查詢網絡服務(例如http://avdata.geekpilot.net/airport/SBSP.xml )以獲取機場的緯度和經度坐標。

因此,我試圖顯示一張我所擁有的經/緯度的Google地圖,但是我看到的一切都是充滿瓷磚的屏幕。

我在https://code.google.com/apis生成了認證密鑰。 我使用keytool命令從Eclipse的debug.keystore文件中獲取SHA1密鑰。 我將密鑰放在清單上和屏幕布局xml文件的Mapview部分上,但是我無法成功。 logcat始終顯示包含如下消息的順序警告:

02-23 10:46:48.856: W/System.err(6359): IOException processing: 26 
02-23 10:46:48.856: W/System.err(6359): java.io.IOException: Server returned: 3 
02-23 10:46:48.856: W/System.err(6359):     at android_maps_conflict_avoidance.com.google.googlenav.map.BaseTileRequest.readResponseData(BaseTileRequest.java:115) 
02-23 10:46:48.856: W/System.err(6359):     at android_maps_conflict_avoidance.com.google.googlenav.map.MapService$MapTileRequest.readResponseData(MapService.java:1473) 
02-23 10:46:48.856: W/System.err(6359):     at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.processDataRequest(DataRequestDispatcher.java:1117) 
02-23 10:46:48.856: W/System.err(6359):     at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.serviceRequests(DataRequestDispatcher.java:994) 
02-23 10:46:48.856: W/System.err(6359):     at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher$DispatcherServer.run(DataRequestDispatcher.java:1702)

我在一個教程中看到我應該使用MD5密鑰,但是當我使用它時,Google會向我顯示一條消息,通知您密鑰無效。 我只有在使用SHA1時才能獲得身份驗證密鑰。

我在我的項目中引用了google-play-services_lib.jar和maps.jar,並且沒有在Java Build Path的Order and Export選項卡上檢查它們。

我的課

public class ShowMapActivity extends MapActivity {
private MapView map;
private Double latitude = 0.0;
private Double longitude = 0.0;
private MyLocationOverlay me = null;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_map);

       Intent mapCall = getIntent();

   latitude = (Double) mapCall.getDoubleExtra(
                                       TestDatabaseActivity.LATITUDE, 0);
   longitude = (Double) mapCall.getDoubleExtra(
                                       TestDatabaseActivity.LATITUDE, 0);

   map = (MapView) findViewById(R.id.mMap);

       final MapController mapController = map.getController();
       mapController.setCenter(getPoint(latitude,longitude));
       map.setBuiltInZoomControls(true);

       Drawable marker=getResources().getDrawable(R.drawable.pushpin_red);
       marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());

       map.getOverlays().add(new SitesOverlay(marker));

       me = new MyLocationOverlay(this, map);
       map.getOverlays().add(me);
}

private GeoPoint getPoint(double lat, double lon) {
        return(new GeoPoint((int)lat, (int)lon));
}

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


private class SitesOverlay extends ItemizedOverlay<OverlayItem> {
    private List<OverlayItem> items=new ArrayList<OverlayItem>();

    public SitesOverlay(Drawable marker) {
       super(boundCenterBottom(marker));
       populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
       return(items.get(i));
    }

    @Override
    protected boolean onTap(int i) {
       Toast.makeText(ShowMapActivity.this, 
                                  items.get(i).getSnippet(),
                                  Toast.LENGTH_SHORT).show();
           return(true);
    }

    @Override
    public int size() {
       return(items.size());
    }
}

}

ActivityMap(布局屏幕)

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <com.google.android.maps.MapView android:id="@+id/mMap"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:enabled="true"
    android:apiKey="my api key here"
    android:clickable="true" />

</RelativeLayout>

表現

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cinquini.airportlocation"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="19" />

    <permission 
        android:name="com.cinquini.airportlocation.permission.MAPS_RECEIVE" 
        android:protectionLevel="signature"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-feature android:glEsVersion="2" android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo" >
        <uses-library android:name="com.google.android.maps" />

        <activity
            android:name="com.cinquini.airportlocation.TestDatabaseActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.cinquini.airportlocation.ShowMapActivity"
            android:label="@string/title_activity_map" >
        </activity>

       <meta-data 
            android:name="com.google.android.maps.v2.API_KEY" 
            android:value="my api key here"/>
    </application>
</manifest>

代碼中有什么我看不見或缺少的東西嗎?

重新生成清單中提到的具有包名稱的api密鑰后,請不要忘記在運行應用程序之前先卸載以前的應用程序

並確保以下步驟正確無誤:

步驟:*確保設備具有Google Play服務APK *安裝Google Play服務版本。 2以上

在此處輸入圖片說明

  • https://code.google.com/apis/console/創建項目
  • 啟用“ Google Maps Android API v2” 在此處輸入圖片說明
  • 在API控制台中在項目中注冊SHA1( 現在,您需要寫SHA1; your.app.package.name )並獲取API KEY
  • 將目錄ANDROID_SDK_DIR / extras / google / google_google_plays / libproject / google-play-services_lib復制到項目的根目錄
  • 將下一行添加到YOUR_PROJECT / project.properties

android.library.reference.1=google-play-services_lib

  • 將下一行添加到YOUR_PROJECT / proguard-project.txt

-keep class * extends java.util.ListResourceBundle {

protected Object[][] getContents();

}

好的,現在您可以使用適用於Android的Google Map API V2創建自己的Google Map應用了。

如果您使用最小SDK = 8創建應用程序,請使用android支持庫v4 + SupportMapFragment而不是MapFragment。

得到這個后讓我知道。

關於地圖問題,請注意,我們必須使用系統中debug.keystore文件中的SHA1指紋。 使用此名稱和應用程序的程序包名稱,我們可以生成映射密鑰。 您還可以在AndroidManifest.xml的“應用程序”部分中使用以下標記查看地圖:(如果使用的是地圖V2)。 另外,請確保您已在開發人員控制台中打開Goog​​le Android Map V2。

我希望這有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM