LocationManager定位获取经纬度并且转换成城市

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private String TAG = "MainActivity";
    private TextView weizhi;
    private ListView listview;

    private LocationManager systemService;
    private final LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            getLoaction(location);
        }
        public void onProviderDisabled(String provider){
            getLoaction(null);
        }
        public void onProviderEnabled(String provider){ }
        public void onStatusChanged(String provider, int status,
                                    Bundle extras){ }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        weizhi = (TextView) findViewById(R.id.weizhi);
        listview = (ListView) findViewById(R.id.shijian);
//动态检查权限,android6.0之后危险权限需要动态声明
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0x11);
        } else if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0x12);

        } else {
            getWeizhi();
        }
    }

    public void getWeizhi() {
        long l = System.currentTimeMillis();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        systemService = (LocationManager) getSystemService(LOCATION_SERVICE);
        String provider = systemService.getBestProvider(criteria, true);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // 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.
            return;
        }
        Location location = systemService.getLastKnownLocation(provider);
        getLoaction(location);
        systemService.requestLocationUpdates(provider, 2000, 10,
                locationListener);

    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode==0x11){
            if (grantResults[0]==PackageManager.PERMISSION_GRANTED&&grantResults[1]==PackageManager.PERMISSION_GRANTED){

                   getWeizhi();
            }
            else
            {
                Toast.makeText(this,"没有授权",Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void getLoaction(Location location) {
        ArrayList dizhi=new ArrayList<>();
        String latLongString;
        double lat=0;
        double lng = 0;
        if (location != null) {
            lat= location.getLatitude();
            lng = location.getLongitude();
            latLongString = "纬度:" + lat + "\n经度:" + lng;
        } else {
            latLongString = "无法获取地理信息";
        }
        List
addList = null; Geocoder ge = new Geocoder(this); try { //将经纬度转化为街道名 addList = ge.getFromLocation(lat, lng, 1); } catch (IOException e) { e.printStackTrace(); } if(addList!=null && addList.size()>0){ for(int i=0; i; i++){ Address ad = addList.get(i); latLongString += "\n"; /** * ad.getCountryName() 国家名 ad.getLocality()城市名 ad.getAdminArea()省名 * ad.getThoroughfare()街道名 ad.getAddressLine(0)周边名 */ latLongString += ad.getCountryName() + ";" + ad.getLocality()+ad.getAdminArea()+";"+ad.getThoroughfare()+ad.getLocale()+ad.getMaxAddressLineIndex() +";"+ad.getAddressLine(0); latLongString +=ad.getAddressLine(1); dizhi.add(ad.getAddressLine(0)); dizhi.add(ad.getAddressLine(1)); dizhi.add(ad.getAddressLine(2)); dizhi.add(ad.getAddressLine(3)); dizhi.add(ad.getAddressLine(4)); dizhi.add(ad.getAddressLine(5)); dizhi.add(ad.getAddressLine(6)); dizhi.add(ad.getAddressLine(7)); dizhi.add(ad.getAddressLine(8)); dizhi.add(ad.getAddressLine(9)); } } weizhi.setText("您当前的位置是:\n" +latLongString); ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,dizhi); listview.setAdapter(adapter); } }

你可能感兴趣的:(LocationManager定位获取经纬度并且转换成城市)