2014-01-29 2 views
3

나는 Lynda 비디오 자습서로 Android 개발을 배우고 있습니다.지도가로드되고 있지만 Android 개발에서지도를 볼 수 없습니다.

Google지도 API 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 키를 당신이 직접 적용되는 하나인가? 아니면 자습서에서 복사 한 내용입니까? 어느 경우이든, 방금 한 것처럼 api 키를 공개적으로 게시하지 않겠습니다. –

+0

업데이트 된 Google Play 서비스를 사용하고 있습니까 ??? – 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 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"/> 

또한, 난 당신이 현재 장치에서 테스트하는 것을 알고 있지만, (종속 플레이 새로운 구글과) 에뮬레이터에서 구글 맵을 실행하는 방법에 대한 호기심의 사람을 위해, 그것은 this way을 수행 할 수 있습니다.

+0

두 권한을 추가했습니다. 하지만 여전히 같은 화면을 볼 수 있습니다. 변경 없음. –

+0

한 번 더 권한을 추가했지만이 시점에서 빨대를 쥐고 ​​있습니다. 응용 프로그램을 다시 빌드하십시오 (업데이트가 수행되지 않은 경우). 그리고 휴대 전화에 데이터/무선 랜이 활성화되어 있는지 확인하십시오. 스크린 샷에서 매우 이상하게 보입니다. 휴대 전화에 두 개의 셀 네트워크 아이콘 (하나는 활성화되어 있고 다른 하나는 비활성화되어 있음)이 있습니까? 이상 하네. Wi-Fi를 사용할 수 없습니다. –

+0

그 권한을 추가했지만 여전히 동일한 문제입니다. 나중에 내 데이터와 GPS를 사용할 수 있습니다. –

0

디버그 키 저장소로 API 키를 생성 했습니까? 아니면 다른 키 스토어로 응용 프로그램에 서명하여 장치를 빌드 했습니까? API 키는 키 스토어에 바인드되므로, 다른 키 스토어 또는 다른 개발자 기계의 다른 디버그 키 스토어로 사인하는 경우 변경해야합니다.

+0

내 개발에 하나의 기계 만 사용하고 있습니다. 디버그 키 저장소로 API 키를 생성했습니다. –

관련 문제