如何使用android 6.0将经度和纬度转换为街道地址?

时间:2016-09-12 10:02:50

标签: android

我正在开发一个应用程序,在此我使用谷歌地图在Android 6.0及6.0以下版本都找到用户的当前位置。问题是我的应用程序显示用户在地图中的当前位置但不是在textfield中显示用户的街道地址,android os版本小于6.0的设备显示文本字段中街道地址的当前位置。以下是我使用的。请建议我,我如何使用android marshmallow解决这个问题?

java

    public class Maps_Activity1 extends FragmentActivity implements
            OnMapReadyCallback,
            GoogleApiClient.ConnectionCallbacks,
            GoogleApiClient.OnConnectionFailedListener,
            GoogleMap.OnMarkerDragListener,
            GoogleMap.OnMapLongClickListener,
            View.OnClickListener {

        //Our Map
        private GoogleMap mMap;
        public static final int REQUEST_ID_ACCESS_COURSE_FINE_LOCATION = 100;
        public static final int MY_PERMISSIONS_REQUEST_LOCATION = 100;

        //To store longitude and latitude from map
        private double longitude;
        private double latitude;
        String caddress;

        //Buttons
        private ImageButton buttonSave;
        private ImageButton buttonCurrent;
        private ImageButton buttonView;

        private Button btnProceed, btnskip, btnClocation;

        String strAdd;
        TextView tvmap, textview;

        private boolean loggedIn = false;
        public static String email;


        private ProgressDialog myProgress;

        //Google ApiClient
        private GoogleApiClient googleApiClient;
        SupportMapFragment mapFragment;
        public int STORAGE_PERMISSION_CODE = 23;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);

            tvmap = (TextView) findViewById(R.id.tv_map);
            textview = (TextView) findViewById(R.id.textView_euser);

            //progress bar
            myProgress = new ProgressDialog(this);
            myProgress.setTitle("Map Loading ...");
            myProgress.setMessage("Please wait...");
            myProgress.setCancelable(true);
            // Display Progress Bar.
            myProgress.show();

            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);

            //Initializing googleapi client
            googleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();

            //googleapi gps


            //Initializing views and adding onclick listeners
            btnProceed = (Button) findViewById(R.id.button_proceed);
            btnskip = (Button) findViewById(R.id.button_skip);
            //    btnClocation=(Button)findViewById(R.id.button_clocation);

            btnProceed.setOnClickListener(this);
            btnskip.setOnClickListener(this);
            //    btnClocation.setOnClickListener(this);

            SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
            loggedIn = sharedPreferences.getBoolean(Config.LOGGEDIN_SHARED_PREF, false);
            email = sharedPreferences.getString(Config.EMAIL_SHARED_PREF, "Not Available");
            textview.setText(email);

        }

        @Override
        protected void onResume() {

            LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
            boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            if (!enabled) {
                showDialogGPS();
            }

            super.onResume();
        }

        private void showDialogGPS() {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setCancelable(false);
            builder.setTitle("Enable GPS");
            builder.setMessage("Please enable GPS");
            builder.setInverseBackgroundForced(true);
            builder.setPositiveButton("Enable", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    startActivity(
                            new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                   getCurrentLocation();
                    moveMap();
                }
            });
            builder.setNegativeButton("Ignore", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }


        @Override
        public void onClick(View v) {
            if (v == btnProceed) {
                //    getCurrentLocation();
                //    moveMap();
                if (loggedIn) {
                    //We will start the Profile Activity

                    //    submitForm();
                    Intent i = new Intent(Maps_Activity1.this, Search_ActivityND.class);
                    startActivity(i);
                }

            } else if (v == btnskip) {

                btnclick_skip();
            }

        }

        //dalete alert
        private void btnclick_skip() {

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
            alertDialogBuilder.setMessage("Are you fine this Location?");
            alertDialogBuilder.setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {

                            //   new JSONParserD().execute();
                            //Starting login activity
                            Intent intent = new Intent(Maps_Activity1.this, Search_ActivityND.class);
                            startActivity(intent);
                            //    if (loggedIn) {
                            //        Intent intent = new Intent(MapsActivity.this, Home.class);
                            //        startActivity(intent);
                            //    }

                        }
                    });

            alertDialogBuilder.setNegativeButton("No",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {

                        }
                    });

            //Showing the alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.show();
        }


        //saving to database
        private void submitForm() {

            caddress = tvmap.getText().toString();
            email = textview.getText().toString();
            //  Toast.makeText(this, "Signing up...", Toast.LENGTH_SHORT).show();
            new MapAsync(this).execute(caddress, email);
        }

        @Override
        protected void onStart() {
            googleApiClient.connect();
            super.onStart();
        }

        @Override
        protected void onStop() {
            googleApiClient.disconnect();
            super.onStop();
        }

        //Getting current location
        private void getCurrentLocation() {
            mMap.clear();
            //Creating a location object

            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.//

                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                        MY_PERMISSIONS_REQUEST_LOCATION);
                return;
            }

            Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);

            if (location != null) {
                //Getting longitude and latitude
                longitude = location.getLongitude();
                latitude = location.getLatitude();

                //    tvmap.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());

              //  strAdd = getCompleteAddressString1(latitude, longitude);
              //  tvmap.setText("Current Address : " + strAdd);
                getCompleteAddressString1(latitude,longitude);

                //moving the map to location
                moveMap();
            }

        }

        //Function to move the map
        private void moveMap() {
            //String to display current latitude and longitude
            String msg = latitude + ", " + longitude;

            //Creating a LatLng Object to store Coordinates
            LatLng latLng = new LatLng(latitude, longitude);

            //Adding marker to map
            mMap.addMarker(new MarkerOptions()
                    .position(latLng) //setting position
                    .draggable(true) //Making the marker draggable
                    .title("Current Location")); //Adding a title

            //Moving the camera
            mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

            //Animating the camera
            mMap.animateCamera(CameraUpdateFactory.zoomTo(15));

        }

        @Override
        public void onMapReady(GoogleMap googleMap) {

            mMap = googleMap;
            LatLng latLng = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(latLng).draggable(true));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            mMap.setOnMarkerDragListener(this);
            mMap.setOnMapLongClickListener(this);

        }

        @Override
        public void onConnected(Bundle bundle) {
            getCurrentLocation();
            myProgress.dismiss();
        }

        @Override
        public void onConnectionSuspended(int i) {

        }

        @Override
        public void onConnectionFailed(ConnectionResult connectionResult) {

        }

        @Override
        public void onMapLongClick(LatLng latLng) {
            //Clearing all the markers
            mMap.clear();

            //Adding a new marker to the current pressed position
            mMap.addMarker(new MarkerOptions()
                    .position(latLng)
                    .draggable(true));
        }

        @Override
        public void onMarkerDragStart(Marker marker) {

        }

        @Override
        public void onMarkerDrag(Marker marker) {

        }

        @Override
        public void onMarkerDragEnd(Marker marker) {
            //Getting the coordinates
            latitude = marker.getPosition().latitude;
            longitude = marker.getPosition().longitude;

            //Moving the map
            moveMap();
        }

        private String getCompleteAddressString1(double LATITUDE, double LONGITUDE) {

            strAdd = "";
            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("Current Address: ");
                    for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
                        strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
                    }
                    strAdd = strReturnedAddress.toString();
                    tvmap.setText(strAdd);
                } else {
                    tvmap.setText("No Address returned!");
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                tvmap.setText("Cannot get Address!");
            }
            return strAdd;
        }

        @Override
        public void onRequestPermissionsResult(int requestCode,
                                               String permissions[], int[] grantResults) {
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_LOCATION: {
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // permission was granted, yay! Do the

                        // contacts-related task you need to do.
                    //    getCurrentLocation();
                    //    moveMap();
                    } else {
                        // permission denied, boo! Disable the
                        // functionality that depends on this permission.
                        Toast.makeText(Maps_Activity1.this, "Permission denied", Toast.LENGTH_SHORT).show();
                    }
                    return;
                }
                // other 'case' lines to check for other
                // permissions this app might request
            }
        }

        //Backpress button
        @Override
        public void onBackPressed() {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            startActivity(intent);
        }

    } 

0 个答案:

没有答案