2014-01-29 4 views
3

Я изучаю разработку Android с помощью видеоуроков Lynda.карта загружается, но не отображается карта в Android-разработке

Я использую API карт Google v2 для отображения карты. Я сделал все шаги в соответствии с учебником.

Когда я пытаюсь просмотреть приложение на своем устройстве, приложения загружаются, я могу видеть логотип Google, но карта не отображается. (внизу я вижу белый фон с логотипом Google).

Я добавил свой код и снимок экрана. может кто-то, пожалуйста, помогите мне исправить это. спасибо ..

Скриншот

enter image description here

Мой ява код ..

package lk.adspace.jaffnatemples; 

import java.io.IOException; 
import java.util.List; 

import android.app.Dialog; 
import android.location.Address; 
import android.location.Geocoder; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.view.View; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.CameraUpdate; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 

public class MainActivity extends FragmentActivity { 

private static final int GPS_ERRORDIALOG_REQUEST = 9001; 
GoogleMap mMap; 

@SuppressWarnings("unused") 
private static final double SEATTLE_LAT = 47.60621, 
SEATTLE_LNG =-122.33207, 
SYDNEY_LAT = -33.867487, 
SYDNEY_LNG = 151.20699, 
NEWYORK_LAT = 40.714353, 
NEWYORK_LNG = -74.005973; 
private static final float DEFAULTZOOM = 15; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (servicesOK()) { 
     setContentView(R.layout.activity_map); 

     if (initMap()) { 
      Toast.makeText(this, "Ready to map!", Toast.LENGTH_SHORT).show(); 
      gotoLocation(SEATTLE_LAT, SEATTLE_LNG, DEFAULTZOOM); 
     } 
     else { 
      Toast.makeText(this, "Map not available!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
    else { 
     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; 
} 

public boolean servicesOK() { 
    int isAvailable = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 

    if (isAvailable == ConnectionResult.SUCCESS) { 
     return true; 
    } 
    else if (GooglePlayServicesUtil.isUserRecoverableError(isAvailable)) { 
     Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable, this, GPS_ERRORDIALOG_REQUEST); 
     dialog.show(); 
    } 
    else { 
     Toast.makeText(this, "Can't connect to Google Play services", Toast.LENGTH_SHORT).show(); 
    } 
    return false; 
} 

private boolean initMap() { 
    if (mMap == null) { 
     SupportMapFragment mapFrag = 
       (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     mMap = mapFrag.getMap(); 
    } 
    return (mMap != null); 
} 

private void gotoLocation(double lat, double lng, 
     float zoom) { 
    LatLng ll = new LatLng(lat, lng); 
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom); 
    mMap.moveCamera(update); 
} 

public void geoLocate(View v) throws IOException { 
    hideSoftKeyboard(v); 

    EditText et = (EditText) findViewById(R.id.editText1); 
    String location = et.getText().toString(); 

    Geocoder gc = new Geocoder(this); 
    List<Address> list = gc.getFromLocationName(location, 1); 
    Address add = list.get(0); 
    String locality = add.getLocality(); 
    Toast.makeText(this, locality, Toast.LENGTH_LONG).show(); 

    double lat = add.getLatitude(); 
    double lng = add.getLongitude(); 

    gotoLocation(lat, lng, DEFAULTZOOM); 

} 

private void hideSoftKeyboard(View v) { 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 

} 

Мой XML-файл

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left|center_vertical" 
     android:text="Location:" 
     android:textSize="20sp" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|center_vertical" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right|center_vertical" 
     android:text="Go" 
     android:onClick="geoLocate"/> 
</LinearLayout> 

<fragment 
    android:id="@+id/map" 
    android:name="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_width="292dp" 
    android:layout_height="374dp" /> 

</LinearLayout> 

мой файл манифеста.

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

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

     <permission 
      android:name="lk.adspace.jaffnatemples.permission.MAPS_RECEIVE" 
      android:protectionLevel="signature"/> 

     <uses-permission android:name="lk.adspace.jaffnatemples.permission.MAPS_RECEIVE"/> 
     <uses-permission android:name="android.permission.INTERNET"/> 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
     <uses-permission 
      android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 

     <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" > 
      <activity 
       android:name="lk.adspace.jaffnatemples.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> 


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


      <meta-data 
       android:name="com.google.android.maps.v2.API_KEY" 
       android:value="I Added my Api Key"/> 

     </application> 

    </manifest> 

Может кто-то, пожалуйста, помогите мне исправить это. Спасибо.

+1

ли ключ апи один вы применили для себя? Или это то, что вы скопировали из учебника? В любом случае я бы не публиковал свой api-ключ публично, как вы. –

+0

Вы используете обновленную службу воспроизведения google ??? – Piyush

+0

Я добавил свой собственный ключ Api, а не из учебника. –

ответ

1

обновленный манифест использование этого

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

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

    <permission 
     android:name="lk.adspace.jaffnatemples.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <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="com.ram.googlemapsv2.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 

    <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" > 
     <activity 
      android:name="lk.adspace.jaffnatemples.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> 

     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="v3" /> 
     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="your api key" /> 
    </application> 

</manifest> 
+0

нет его не работает. –

+0

Я проверил его с вашим опубликованным кодом, он работает со мной, поэтому я думаю, вам нужно проверить ваш ключ и версию api, убедитесь, что вы включили карту v2 или v3 – Pearl

0

Вы можете просмотреть его только в телефоне. То, что вы видите сейчас, это все, что вы можете получить в эмуляторе.

+0

Нет. Я просматриваю его в своем телефоне.скриншот не из эмулятора. –

+0

У вас есть статус «Google Maps Android API v2»? –

+0

@ s s k. да. –

0

Вы не запрашиваете никаких разрешений gps.

<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"/> 

Кроме того, я знаю, что вы сказали, что вы в настоящее время тестирования на устройстве, но и для любого, кто любопытно о запуске карты Google на эмуляторе (с новым Google Play зависимости), это может быть сделано this way.

+0

Я добавил эти два разрешения. но все же я вижу один и тот же экран. без изменений. –

+0

Я добавил еще одно разрешение, но сейчас я просто хватаюсь за соломинку. Обязательно пересобирайте приложение (на всякий случай обновление не требуется). И убедитесь, что ваш телефон имеет данные/Wi-Fi включен. С вашего скриншота это выглядит очень странно. Кажется, у вашего телефона два значка сотовой сети (один включен, а один нет)? Это странно. И Wi-Fi не включен. –

+0

Я добавил это разрешение, но все тот же вопрос. У меня есть данные и GPS включен. –

0

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

+0

Я использую только одну машину для своего развития. и я создал API-ключ с моим хранилищем отладки. –

Смежные вопросы