Voici un exemple complet de code à l'aide d'un Fil et d'un Gestionnaire d'obtenir le Geocoder réponse sans blocage de l'INTERFACE utilisateur.
Geocoder appel de la procédure, peuvent être situés dans une classe d'assistance
public static void getAddressFromLocation(
final Location location, final Context context, final Handler handler) {
Thread thread = new Thread() {
@Override public void run() {
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> list = geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 1);
if (list != null && list.size() > 0) {
Address address = list.get(0);
// sending back first address line and locality
result = address.getAddressLine(0) + ", " + address.getLocality();
}
} catch (IOException e) {
Log.e(TAG, "Impossible to connect to Geocoder", e);
} finally {
Message msg = Message.obtain();
msg.setTarget(handler);
if (result != null) {
msg.what = 1;
Bundle bundle = new Bundle();
bundle.putString("address", result);
msg.setData(bundle);
} else
msg.what = 0;
msg.sendToTarget();
}
}
};
thread.start();
}
Voici l'appel à cette Geocoder procédure dans votre INTERFACE utilisateur d'Activité:
getAddressFromLocation(mLastKownLocation, this, new GeocoderHandler());
Et le gestionnaire d'afficher les résultats dans votre INTERFACE utilisateur:
private class GeocoderHandler extends Handler {
@Override
public void handleMessage(Message message) {
String result;
switch (message.what) {
case 1:
Bundle bundle = message.getData();
result = bundle.getString("address");
break;
default:
result = null;
}
// replace by what you need to do
myLabel.setText(result);
}
}
Ne pas oublier de mettre de l'autorisation suivante dans votre Manifest.xml
<uses-permission android:name="android.permission.INTERNET" />