I am using the Android 4.0.3 version in apps. Now I want to get the city name or other information from LATITUDE and LONGITUDE but when I run the apps is show me service not available.
Logcat
01-10 13:58:29.279: W/System.err(1211): java.io.IOException: Service not Available
01-10 13:58:29.289: W/System.err(1211): at android.location.Geocoder.getFromLocation(Geocoder.java:136)
01-10 13:58:29.299: W/System.err(1211): at com.example.vixxa.VisitorActivity$CityAsyncTask.doInBackground(VisitorActivity.java:601)
01-10 13:58:29.319: W/System.err(1211): at com.example.vixxa.VisitorActivity$CityAsyncTask.doInBackground(VisitorActivity.java:1)
01-10 13:58:29.329: W/System.err(1211): at android.os.AsyncTask$2.call(AsyncTask.java:264)
01-10 13:58:29.329: W/System.err(1211): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-10 13:58:29.339: W/System.err(1211): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-10 13:58:29.349: W/System.err(1211): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-10 13:58:29.349: W/System.err(1211): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-10 13:58:29.359: W/System.err(1211): at java.lang.Thread.run(Thread.java:856)
CodeAsynctak.java
public class CityAsyncTask extends AsyncTask<String , String,String>
{
@Override
protected String doInBackground(String... params) {
Geocoder geocoder = new Geocoder(VisitorActivity.this, Locale.getDefault());
try
{
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
Log.e("Addresses","-->"+addresses);
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
}
Try using this code, it worked on my TAB2.
public class CityAsyncTask extends AsyncTask<String , String,String>
{
@Override
protected String doInBackground(String... params) {
Geocoder geocoder = new Geocoder(LatLongActivity.this, Locale.getDefault());
try
{
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
Log.e("Addresses","-->"+addresses);
result = addresses.get(0).toString();
}
catch (IOException e)
{
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
AlertDialog.Builder alert = new AlertDialog.Builder(LatLongActivity.this);
alert.setTitle("ADDRESS");
alert.setMessage(result);
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
alert.setCancelable(false);
alert.show();
}
}
try with below code that i have Used it in my application :
Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
try {
List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1);
if(addresses != null) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
}
myAddress.setText(strReturnedAddress.toString());
}
else{
myAddress.setText("No Address returned!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
myAddress.setText("Can not get Address!");
}
Most probably your project's build target is Android 4.0 instead of Google APIs. In Eclipse, right click on the project and select properties, go to Android, select Google APIs
To solve Service Not Available error
Add this line to application as a direct child in manifest
<uses-library android:name="com.google.android.maps"/>
update your manifest like this
<application
android:name="pkgname"
android:allowBackup="true"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme" >
<uses-library android:name="com.google.android.maps" />
<activity
android:name=".yourlaunchingactivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
.......
</activity>
<activity
......
</activity>
</application>
来源:https://stackoverflow.com/questions/14253737/get-city-name-from-latitude-and-longitude-in-android-gives-service-not-available