3

我需要从纬度和经度中获取邮政编码,我能够获取带有街道名称的地址,但无法获取邮政编码。String pCode在下面的代码中返回Null 。下面是我正在使用的代码:

    import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

public class GetCurrentLocation extends Activity implements OnClickListener {

    private LocationManager locationMangaer=null;
    private LocationListener locationListener=null; 

    private Button btnGetLocation = null;
    private EditText editLocation = null;   
    private ProgressBar pb =null;

    private static final String TAG = "Debug";
    private Boolean flag = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        //if you want to lock screen for always Portrait mode  
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        pb = (ProgressBar) findViewById(R.id.progressBar1);
        pb.setVisibility(View.INVISIBLE);

        editLocation = (EditText) findViewById(R.id.editTextLocation);  

        btnGetLocation = (Button) findViewById(R.id.btnLocation);
        btnGetLocation.setOnClickListener(this);

        locationMangaer = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    }

    @Override
    public void onClick(View v) {
        flag = displayGpsStatus();
        if (flag) {

            Log.v(TAG, "onClick");      

            editLocation.setText("Please!! move your device to see the changes in coordinates."+"\nWait..");

            pb.setVisibility(View.VISIBLE);
            locationListener = new MyLocationListener();

            locationMangaer.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10,
                    locationListener);

            } else {
            alertbox("Gps Status!!", "Your GPS is: OFF");
        }

    }

    /*----------Method to Check GPS is enable or disable ------------- */
    private Boolean displayGpsStatus() {
        ContentResolver contentResolver = getBaseContext().getContentResolver();
        boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(
                contentResolver, LocationManager.GPS_PROVIDER);
        if (gpsStatus) {
            return true;

        } else {
            return false;
        }
    }

    /*----------Method to create an AlertBox ------------- */
    protected void alertbox(String title, String mymessage) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Your Device's GPS is Disable")
                .setCancelable(false)
                .setTitle("** Gps Status **")
                .setPositiveButton("Gps On",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // finish the current activity
                                // AlertBoxAdvance.this.finish();
                                Intent myIntent = new Intent(
                                        Settings.ACTION_SECURITY_SETTINGS);
                                startActivity(myIntent);
                                dialog.cancel();
                            }
                        })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // cancel the dialog box
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = builder.create();
        alert.show();
    }

    /*----------Listener class to get coordinates ------------- */
    private class MyLocationListener implements LocationListener {
        @Override
        public void onLocationChanged(Location loc) {

                editLocation.setText("");
                pb.setVisibility(View.INVISIBLE);
                Toast.makeText(getBaseContext(),"Location changed : Lat: " + loc.getLatitude()
                                + " Lng: " + loc.getLongitude(),Toast.LENGTH_SHORT).show();
                String longitude = "Longitude: " +loc.getLongitude();  
                Log.v(TAG, longitude);
                String latitude = "Latitude: " +loc.getLatitude();
                Log.v(TAG, latitude);

                /*----------to get City-Name from coordinates ------------- */
                String cityName=null;
                String addrs = null;
                String pCode = null;
                Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());                  
                List<Address>  addresses;  
                try {  
                 addresses = gcd.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);  
                 if (addresses.size() > 0)  
                  System.out.println(addresses.get(0).getLocality());

                 cityName=addresses.get(0).getLocality();
                 addrs = addresses.get(0).getAddressLine(0);
                 pCode = addresses.get(0).getPostalCode();
                } catch (IOException e) {                 
                 e.printStackTrace();  
                } 

                String s = longitude+"\n"+latitude +"\n\nMy Currrent City is: "+cityName+" Address "+ addrs+
                        " Postal Code"+pCode;
                editLocation.setText(s);
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub          
        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub          
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub          
        }
    }



}
4

2 回答 2

1

使用这个 api 它也会给出邮政编码。通过传递纬度和日志。 http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=23.0333&lng=72.6167

于 2013-03-05T13:03:11.330 回答
0

API.getFromLocation状态的描述:

返回值可以通过网络查找的方式获得。结果是最佳猜测,不保证有意义或正确。

因此,返回的位置很有可能只缺少一些信息。

您的问题有两种解决方案:

1)增加maxResults,假设为 5。并检查 5 中是否有任何一个有邮政编码。(查询可能返回小于 5,因此请确保进行适当的检查)

2)参考 location 中的 ZipCode,如果我们有城市名称,如何单独查询。

于 2013-03-05T13:06:14.837 回答