Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Geocoder.getLocationFromName() throws IOException: Service not available on Device [duplicate]

I am using the Geocoder.getLocationFromName() method on both the emulator and my phone (Nexus S with Android 4.1) and I get the following exception:

java.io.IOException: Service not Available

There are a number of questions about this appearing on the emulator (example), and most of them say that it is a specific version of the emulator that has the problem. However, the exception appears both on my AVDs (2.3 and 4.1) and my phone.

Both my phone and the AVDs have internet connection. My API version is 16 (android 4.1), but I also tried with older ones. Both AVDs include Google APIs.

Any ideas what is going on here?

This is the relevant code snippet:

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

And this is my manifest:

<?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>
like image 322
Markos Fragkakis Avatar asked Sep 21 '12 17:09

Markos Fragkakis


1 Answers

Make sure your application's build target is set to one of the Google APIs and not simply Android 4.0 (or similar). You can change this setting in Eclipse by right-clicking on your project and selecting "Properties" then "Android." Alternatively, you can simply edit the project.properties file to something like the following:

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

The reason is that the Geocoder class is present in the core Android framework, but depends on code contributed by the Google APIs to function properly. Even if your AVD includes the Google APIs, your project still needs to be built against that specific build target.

like image 64
twaddington Avatar answered Nov 14 '22 22:11

twaddington