2014-01-21 17 views
0

Цель, которую я пытаюсь достичь, - это просто отобразить карту.Как отобразить простую карту в Android (используя новейший API)?

Я знаю, что этот вопрос задан раньше, и я следил за потоками и учебниками, но я ничего не вижу, когда я пытаюсь сделать следующее. Есть ли ошибка в моем коде где-то?

Является ли мой код правильным для работы с новейшим API карт?

Мой ява источник запуска файла:

package com.devmav.mapstest; 
import android.os.Bundle; 
import android.app.Activity; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 

public class MainActivity extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

Мой Компоновка XML файл:

<?xml version="1.0" encoding="utf-8"?> 
<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"/> 

Мой AndroidManifest.xml:

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

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    <!-- External storage for caching. --> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <!-- My Location --> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <!-- Maps API needs OpenGL ES 2.0. --> 
    <uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true"/> 
    <!-- End of copy. --> 


<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <meta-data android:name="com.google.android.maps.v2.API_KEY" 
    android:value="<I ENTERED MY API KEY HERE FROM GOOGLE CLOUD CONSOLE: https://cloud.google.com/console/project"/> 

    <activity 
     android:name="com.devmav.mapstest.MainActivity" 
     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> 

</manifest> 

UPDATE 1: После добавления служб Google в AndroidManifest.xml я вижу пустой экран для карты.

enter image description here

UPDATE 2: Я добавил разрешения правильно мое приложение. Я совершенно уверен, что я правильно добавил пространство имен для отпечатков пальцев и приложений SHA1 для приложения.

enter image description here

+1

есть добавить сервисы Google Play в качестве справочной библиотеки .. –

ответ

1

Вы отсутствуют

<meta-data 
android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_version" /> 

в приложении тег манифеста.

Убедитесь, что вы правильно указали проект библиотеки. Убедитесь, что вы включили карты для Android в консоли google api, и у вас есть право.

Посмотрите, выполнили ли вы все шаги, указанные в приведенной ниже ссылке, и вы увидите карту.

Последнее тестирование на устройстве, на котором установлены сервисы Google Play.

https://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2

Преобразование комментарий ответить

Попробуйте заново сгенерировать ключ API.

0

Попробуйте добавить сервисы Google Play в качестве справочной библиотеки ...

в вас файл манифеста

<permission 
     android:name="com.example.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature"/> 
     <uses-permission android:name="com.example.permission.MAPS_RECEIVE"/> 

<meta-data 
android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_version" /> 
+3

этого разрешения не требуется. check использует разрешение https://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2 – Raghunandan

1

Просто добавьте это в вашем приложении тег в файле манифеста:

<meta-data 
android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_version" /> 

Или следовать this ссылке, которую я ответил ранее.

+0

Я внес изменения, я вижу пустую карту с кнопками + (увеличение) и - (уменьшение), но нет фактическая вода или земля на карте. Я обновил вопрос с помощью скриншота. Я на Galaxy S3. – user1406716

+1

Включили ли вы Google maps android api v2 в консоли api? –

+1

А также убедитесь, что ваш ключ api создан в API-консоли с вашим именем sha1 +, указанным в файле Android Manifest.xml. Если вы все равно получите то же самое, сообщите мне. –

0

использовать это:

public class MainActivity extends FragmentActivity { 

final int RQS_GooglePlayServices = 1; 
private GoogleMap myMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FragmentManager myFragmentManager = getSupportFragmentManager(); 
    SupportMapFragment mySupportMapFragment 
    = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map); 
    myMap = mySupportMapFragment.getMap(); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_legalnotices: 
     String LicenseInfo = GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo(
     getApplicationContext()); 
     AlertDialog.Builder LicenseDialog = new AlertDialog.Builder(MainActivity.this); 
     LicenseDialog.setTitle("Legal Notices"); 
     LicenseDialog.setMessage(LicenseInfo); 
     LicenseDialog.show(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); 

    if (resultCode == ConnectionResult.SUCCESS){ 
    Toast.makeText(getApplicationContext(), 
    "isGooglePlayServicesAvailable SUCCESS", 
    Toast.LENGTH_LONG).show(); 
    }else{ 
    GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices); 
    } 

} 

} 

и это для основной деятельности:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

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

</RelativeLayout> 
Смежные вопросы