2014-07-24 2 views
0

Google지도 api v2를 사용하여 위도와 경도를 얻으려고합니다. 그래서 먼저 내 프로젝트 - appCompact_v7에 라이브러리를 추가하고 (때문에 명성 죄송합니다 질수 게시물 이미지) 아래 이미지 링크에 표시됩니다-play0service_lib 구글 :Google지도 api v2를 사용하여 위도와 경도를 표시하는 중에 오류가 표시됨

Eclipse project screen shot

그리고 코드는 다음과 같습니다를 :

의 AndroidManifest.xml :

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

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


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

<!-- set other permissions --> 
<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="android.permission.ACCESS_FINE_LOCATION" /> 

<!-- Maps API version 2 requires OpenGL ES version 2 --> 
<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=".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.maps.v2.API_KEY" 
     android:value="AIzaSxAZYjSWRbcxyZkCf35Fi75cLxxxaVHeQbw" /> 
</application> 
</manifest> 

레이아웃 :

<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="${relativePackage}.${activityClass}" > 

    <TextView 
    android:id="@+id/TextLat" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="68dp" 
    android:text="lat" /> 

<TextView 
    android:id="@+id/TextLong" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/TextLat" 
    android:layout_below="@+id/TextLat" 
    android:layout_marginTop="52dp" 
    android:text="lon" /> 
</RelativeLayout> 

MainAcivity.java :

public class MainActivity extends Activity 
     implements GooglePlayServicesClient.ConnectionCallbacks, 
      GooglePlayServicesClient.OnConnectionFailedListener 
{ 
TextView txtLat, txtLong; 
LocationClient locClient; 

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

    txtLat = (TextView)findViewById(R.id.TextLat); 
    txtLong = (TextView)findViewById(R.id.TextLong); 

    locClient = new LocationClient(this, this, this); 

    gpsChk(); 
} 

@Override 
protected void onStart() 
{ super.onStart(); 
    locClient.connect(); } 

@Override 
protected void onStop() 
{ locClient.disconnect(); 
super.onStop();} 

@Override 
public void onConnectionFailed(ConnectionResult result) { 
     // TODO Auto-generated method stub } 

@Override 
public void onConnected(Bundle connectionHint) { 
    Location location = locClient.getLastLocation(); 

    if(location!=null) 
    { 
     txtLat.setText(String.valueOf(location.getLatitude())); 
     txtLong.setText(String.valueOf(location.getLongitude())); 
    } 
    } 

@Override 
public void onDisconnected() { 
    // TODO Auto-generated method stub } 

private void gpsChk() 
{ 
    // if GPS is not enabled, start GPS settings activity 
    LocationManager locationManager = 
      (LocationManager) getSystemService(LOCATION_SERVICE); 

    if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
    { 
     Toast.makeText(this, "Please activate GPS settings", 
       Toast.LENGTH_LONG).show(); 
     Intent intent = 
       new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
     startActivity(intent); 
    } 
} 
} 

그것의 런타임 오류가 표시되지 않습니다. 로그 캣에서 오류 로그 : 나는 구글지도가 실행되며 GPS가 너무에 내 안드로이드 전화에 응용 프로그램을 실행하려고

07-24 11:23:34.259: E/AndroidRuntime(4433): FATAL EXCEPTION: main 
07-24 11:23:34.259: E/AndroidRuntime(4433): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testmapact2/com.example.testmapact2.MainActivity}: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 5077000 but found 0. You must have the following declaration within the <application> element:  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.ActivityThread.access$600(ActivityThread.java:162) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.os.Handler.dispatchMessage(Handler.java:107) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.os.Looper.loop(Looper.java:194) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.ActivityThread.main(ActivityThread.java:5371) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at java.lang.reflect.Method.invoke(Method.java:525) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at dalvik.system.NativeStart.main(Native Method) 
07-24 11:23:34.259: E/AndroidRuntime(4433): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 5077000 but found 0. You must have the following declaration within the <application> element:  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.common.GooglePlayServicesUtil.x(Unknown Source) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.internal.hc.connect(Unknown Source) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.location.LocationClient.connect(Unknown Source) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.example.testmapact2.MainActivity.onStart(MainActivity.java:42) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1170) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.Activity.performStart(Activity.java:5132) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316) 
07-24 11:23:34.259: E/AndroidRuntime(4433):  ... 11 more 

. 그러나 여전히 오류를 표시하고 응용 프로그램이 메시지를 보내 중지합니다. 불행히도 응용 프로그램이 중지되었습니다.

도와주세요. :-)

+0

여기서'MapFragment'는 무엇입니까? 지도를 표시하지 않습니다. – Raghunandan

답변

0

당신은 응용 프로그램 태그의 자식 매니페스트 파일에 메타 태그를 misisng하는

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

당신은

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

이 또한 필요로 필요하지 않습니다

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

지도를 표시하려면 문서를 읽으십시오. 나는 당신이 명확하게 로그 캣 말했다 어디 레이아웃에 MapFragment를 참조

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

+0

태그가 아닙니다. google.android.gms.version " android : value ="@ integer/google_play_services_version "/>? 음, 나는 둘 다 시도했다. 또한 maps_receive 태그를 삭제했습니다. ACCESS_FINE_LOCATION에 대한 권한이 이미 내 코드에 있으므로 ACCESS_COARSE_LOCATION이 (가) 추가되었습니다. 그러나 여전히 오류를 보여줍니다. 그리고지도를 보여줄 필요가 없습니다. 위도와 경도 값만 있으면됩니다. – Rashedul

+0

그러면 위도 경도를 얻기 위해 매니페스트에있는 권한이 거의 필요하지 않습니다. 왜 구글 플레이 서비스가 필요합니까 ?? – Raghunandan

+0

? 나는 그것을 어떻게 할 것인가? – Rashedul

1

을 게시하지 않습니다

Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 5077000 but found 0. You must have the following declaration within the <application> element:  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.common.GooglePlayServicesUtil.x(Unknown Source) 
    07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source) 
    07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.internal.hc.connect(Unknown Source) 
    07-24 11:23:34.259: E/AndroidRuntime(4433):  at com.google.android.gms.location.LocationClient.connect(Unknown Source) 

당신은에 <application> 태그에서 구글 <meta-data> 태그로 서비스 버전을 재생 추가해야합니다 당신의 manifest.xml

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

또한 매니페스트 섹션에서 추가주십시오 manifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
+0

? 음, 나는 둘 다 시도했다. 또한 maps_receive 태그를 삭제했습니다. ACCESS_FINE_LOCATION에 대한 권한이 이미 내 코드에 있으므로 ACCESS_COARSE_LOCATION이 (가) 추가되었습니다. 그러나 여전히 오류를 보여줍니다. 그리고 나는 위도와 경도의 가치를 필요로하는지도를 보여줄 필요가 없다. – Rashedul

1

permissions 아래에 추가합니다.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
관련 문제