2012-09-21 17 views
6

Sto usando il metodo Geocoder.getLocationFromName() sia l'emulatore e il mio telefono (Nexus S con Android 4.1) e ottengo la seguente eccezione:Android Geocoder.getLocationFromName() throws IOException: Servizio non disponibile sul dispositivo

java.io.IOException: Service not Available 

ci sono una serie di domande su questo che appare sul emulatore (example), e la maggior parte di loro dicono che si tratta di una versione specifica del emulatore che presenta il problema. Tuttavia, l'eccezione appare sia sui miei AVD (2.3 e 4.1) che sul mio telefono.

Sia il mio telefono che gli AVD hanno una connessione internet. La mia versione API è 16 (Android 4.1), ma ho provato anche con quelli più vecchi. Entrambi gli AVD includono le API di Google.

Qualche idea cosa sta succedendo qui?

Questo è il relativo frammento di codice:

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

E questo è il mio manifesto:

<?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

Solo per riferimento, potrebbe anche essere correlato a questo problema: http://code.google.com/p/android/issues/detail?id=38009 Un riavvio del dispositivo sembra risolvere questo problema. – Somatik

+0

Non importa quanti riavvii ho fatto, non ha fatto nulla nel mio caso. –

risposta

7

Assicurarsi build target dell'applicazione è impostato su uno dei API di Google e non semplicemente Android 4.0 (o simile). Puoi modificare questa impostazione in Eclipse facendo clic con il pulsante destro del mouse sul progetto e selezionando "Proprietà", quindi "Android". In alternativa, si può semplicemente modificare il file project.properties a qualcosa di simile al seguente:

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

La ragione è che la classe Geocoder è presente nel quadro Android core, ma dipende dal codice contribuito con le API di Google per funzionare correttamente. Anche se il tuo AVD include le API di Google, il tuo progetto deve ancora essere costruito su quel specifico target di build.

+0

Grazie per la risposta. Ma come ho già detto, sto usando gli AVD delle API di Google. E ho anche lo stesso problema sul mio telefono. –

+0

Ehi @MarkosFragkakis, hai detto che stai utilizzando le API di Google nel tuo AVD, ma anche il target di costruzione del tuo progetto è impostato sullo stesso livello dell'API di Google? Queste sono due diverse impostazioni. – twaddington

+1

Hai ragione. Ho cambiato l'obiettivo con quello che hai suggerito (tramite Eclipse). Tuttavia, ora ricevo un "java.io.IOException: Impossibile analizzare la risposta dal server". Presumo che questo sia un problema diverso, quindi contrassegnerò la tua risposta come quella corretta. Tuttavia, se avete qualche suggerimento, sono più che benvenuti. Grazie. –

Problemi correlati