2017-10-04 4 views
1

Ich arbeitete mit Geocoder in meiner Android-App, um den Namen des Landes mit Breiten- und Längengrad zu erhalten. Ich fand, dass es in der Kitkat-Version und darunter gut funktionierte. Aber wenn ich meine App in den obigen Versionen teste, gab es null. Also meine Frage ist einfach, wie man Geocoder über Kitkat-Versionen einsetzt. Wenn es eine andere bessere Option als einen Geocoder gibt, dann schlagen Sie mir bitte vor! Vielen Dank im Voraus!Geocoder funktioniert nicht in Android über Kitkat Version

+0

haben Sie Runtime-Berechtigung für über API 22 oder höher? –

+0

Überprüfen Sie auf Laufzeitberechtigungen, und wenn das Problem gleich bleibt, verwenden Sie Goole Location API, um den Standort zu erwerben. –

+0

Mögliches Duplikat von [Geocoder funktioniert auf einigen Android-Telefonen nicht] (https://stackoverflow.com/questions/31146775/ Geocoder-funktioniert nicht bei einigen Android-Telefonen) –

Antwort

0

Ich poste meinen Code für Geocoder. Folgen Sie ihm

//Keep this GeocodingLocation.java in a separate file. 

    public class GeocodingLocation { 

     private static final String TAG = "GeocodingLocation"; 
     public static void getAddressFromLocation(final String locationAddress, 
                final Context context, final Handler handler) { 
      Thread thread = new Thread() { 
       @Override 
       public void run() { 
        Geocoder geocoder = new Geocoder(context, Locale.getDefault()); 
        String result = null; 
        String latitude = null; 
        String longitude = null; 
        try { 
         List<Address> addressList = geocoder.getFromLocationName(locationAddress, 1); 
         if (addressList != null && addressList.size() > 0) { 

          Log.e("GeocodingLocation --> getAddressFromLocation ==>" + 
            addressList.toString()); 

          Address address = (Address) addressList.get(0); 
          StringBuilder sb = new StringBuilder(); 
          latitude = String.valueOf(address.getLatitude()); 
          longitude = String.valueOf(address.getLongitude()); 

          Logger.infoLog("GeocodingLocation --> Lat & Lang ==>" + latitude +" "+longitude); 
          //sb.append(address.getLatitude()).append("\n"); 
          //sb.append(address.getLongitude()).append("\n"); 

         } 
        } catch (IOException e) { 
         Log.e(TAG, "Unable to connect to Geocoder", e); 
        } finally { 
         Message message = Message.obtain(); 
         message.setTarget(handler); 
         if (latitude != null && longitude != null) { 
          message.what = 1; 
          Bundle bundle = new Bundle(); 
          bundle.putString("latitude", latitude); 
          bundle.putString("longitude", longitude); 
          message.setData(bundle); 
         } else { 
          message.what = 1; 
          Bundle bundle = new Bundle(); 
          result = "Address: " + locationAddress + 
            "\n Unable to get Latitude and Longitude for this address location."; 
          bundle.putString("address", result); 
          message.setData(bundle); 
         } 
         message.sendToTarget(); 
        } 
       } 
      }; 
      thread.start(); 
     } 
    } 

rufen Sie die Klasse von Ihrem Fragment.

private void getAddressLatitudeLongitude(String branchAddress) { 
     Log.e("getAddressLatitudeLongitude ==>" + branchAddress); 

     GeocodingLocation.getAddressFromLocation(branchAddress, thisActivity, new GeocoderHandler()); 
    } 

Halten Sie diese Klasse als innere Klasse in demselben Fragment

private class GeocoderHandler extends Handler { 
     @Override 
     public void handleMessage(Message message) { 
      switch (message.what) { 
       case 1: 
        try { 
         Bundle bundle = message.getData(); 
         latitude = bundle.getString("latitude"); 
         longitude = bundle.getString("longitude"); 

         Log.e("CreateBranch --> GeocoderHandler ==>" + latitude + " " + longitude); 
        }catch (Exception e){ 
         e.printStackTrace(); 
        } 
        break; 
       default: 
        latitude = null; 
        longitude = null; 
      } 
      latitudeList.add(latitude); 
      longitudeList.add(longitude); 

      if(latitude==null || longitude==null){ 
       showAlertDialog("Please enter correct address", Constants.APP_NAME); 
      } 

      Log.e("Latitude list =>" + latitudeList); 
      Log.e("Longitude list =>" + longitudeList); 
     } 
    } 

Ausgang wird Breiten- und Längengrad erhalten. Hoffe, diese Antwort hilft.

+0

Ich glaube, du hast meine Frage nicht bekommen. Ich frage nicht nach dem Längen- und Breitengrad von der Adresse. Ich möchte die Ortsadresse aus dem Längen- und Breitengrad ableiten. –

Verwandte Themen