2012-09-21 2 views
6

에뮬레이터와 휴대 전화 (Android 4.1의 Nexus S)에서 Geocoder.getLocationFromName() 메소드를 사용하고 있는데 다음 예외가 발생합니다.Android Geocoder.getLocationFromName() throws IOException : 장치에서 서비스를 사용할 수 없음

java.io.IOException: Service not Available 

에뮬레이터 (example)에는이 문제와 관련하여 여러 가지 질문이 있으며 대부분이 문제가있는 특정 버전의 에뮬레이터라고합니다. 그러나 예외는 내 AVD (2.3 및 4.1)와 휴대 전화에 모두 나타납니다.

내 휴대 전화와 AVD 모두 인터넷에 연결되어 있습니다. 내 API 버전은 16 (안드로이드 4.1)이지만, 나는 또한 오래된 API를 사용해 보았습니다. 두 AVD 모두 Google API를 포함합니다.

아이디어가 어떻게되고 있습니까?

이 관련 코드입니다 :

Geocoder myGeocoder = new Geocoder(getApplicationContext(), Locale.getDefault()); 
List<Address> newAddresses = myGeocoder.getFromLocationName(arg0.toString(), 10); 

그리고 이것은 내 매니페스트입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.asdasd" android:versionCode="6" android:versionName="1.3.1"> 
    <uses-sdk android:minSdkVersion="16" /> 
    <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" /> 
    <application android:icon="@drawable/ic_launcher_asdasd" 
     android:label="@string/app_name"> 
     <activity android:name=".AsdasdActivity" android:label="@string/app_name" 
      android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="com.google.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation" /> 
    </application> 
</manifest> 
+0

참조 용으로도이 문제와 관련 될 수 있습니다. http://code.google.com/p/android/issues/detail?id=38009 기기를 재부팅하면 문제가 해결 된 것으로 보입니다. – Somatik

+0

재부팅 횟수가 아무리 많아도 제 경우에는 아무런 문제가 없습니다. –

답변

7

하는 응용 프로그램의 빌드 타겟이 구글 API를 단순히 아니라 중 하나로 설정되어 있는지 확인합니다 Android 4.0 (이상) 프로젝트에서 마우스 오른쪽 버튼을 클릭하고 "Properties", "Android"를 선택하여 Eclipse에서이 설정을 변경할 수 있습니다. 또는, 당신은 단순히 다음과 같이 뭔가에 project.properties 파일을 편집 할 수 있습니다

# Project target 
target=Google Inc.:Google APIs:16 

이유는 Geocoder 클래스는 핵심 안드로이드 프레임 워크에 있는지,하지만 제대로 작동하려면 구글 API에서 기여 코드에 따라 달라집니다. AVD에 Google API가 포함 된 경우에도 프로젝트는 해당 빌드 타겟에 맞게 빌드해야합니다.

+0

답해 주셔서 감사합니다. 하지만 이미 말씀 드렸듯이 Google API AVD를 사용하고 있습니다. 그리고 내 전화기에서도 똑같은 문제가 있습니다. –

+0

안녕하세요 @ MarkosFragkakis, AVD에서 Google API를 사용 중이지만 프로젝트의 빌드 대상도 동일한 Google API 수준으로 설정되어 있습니까? 두 가지 설정이 있습니다. – twaddington

+1

당신이 옳습니다. 나는 당신이 제안한 것 (Eclipse를 통해)으로 목표를 변경했다. 그러나 이제 "java.io.IOException : 서버에서 응답을 구문 분석 할 수 없습니다." 저는 이것이 다른 문제라고 생각합니다. 그래서 당신의 대답을 올바른 것으로 표시 할 것입니다. 그러나, 당신이 어떤 제안이라도 있으면, 그들은 환영받는 것 이상이다. 감사. –

관련 문제