使用LBS(地理位置)

一.使用之前的简单封装的OkHttpUtil

http://www.cnblogs.com/itfenqing/p/6758909.html

 

二.关键代码:

public class MainActivity extends Activity {


    private TextView tip;
    private LocationManager locationManager;
    private String provider;

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

        tip = (TextView)findViewById(R.id.tip);
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

        // 获取所有可用的地理位置提供器
        List<String> providerList = locationManager.getProviders(true);

        if( providerList.contains(locationManager.GPS_PROVIDER) ){
            provider = locationManager.GPS_PROVIDER;
        }else if( providerList.contains(locationManager.NETWORK_PROVIDER) ){
            provider = locationManager.NETWORK_PROVIDER;
        }else{
            Toast.makeText(this, "没有地理位置提供器", Toast.LENGTH_LONG).show();
            return;
        }

        Location location = null;
        try {
            location = locationManager.getLastKnownLocation(provider);
        }catch (SecurityException e){
            e.printStackTrace();
        }

        if(location != null){
            showLocation(location);
        }

        try{
        // 设置一个监听器,每1秒检测一次,位置移动超过1米,则更新
            locationManager.requestLocationUpdates(provider,
                1000,
                1,
                listener);
        }catch (SecurityException e){
            e.printStackTrace();
        }

    }

    // 监听器
    LocationListener listener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            showLocation(location);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {

        }
    };

    private void showLocation(Location location){
        String url = "http://api.map.baidu.com/geocoder/v2/?ak=nUvlnh8wk6cDupYs5foacyXz&" +
                "location="+location.getLatitude()+","
                +location.getLongitude()+"&output=json&pois=1";
        // 异步获取
        OkHttpUtil.AsyncGet(url, new HttpListener() {
            @Override
            public void onFinish(String reponse) {
                parseJson(reponse);
            }

            @Override
            public void onError(Exception e) {
                e.printStackTrace();
            }
        });


        //String tipStr = "纬度:" + location.getLatitude() + ",经度:" + location.getLongitude();
        //tip.setText(tipStr);
    }

    // parseJson
    private void parseJson(String jsonStr){
        try {
            final StringBuilder info = new StringBuilder();
            JSONObject json = new JSONObject(jsonStr);
            if( json.get("status").toString().equals("0") ){
                info.append("经度" + json.getJSONObject("result")
                        .getJSONObject("location").get("lng").toString());
                info.append(",纬度" + json.getJSONObject("result")
                        .getJSONObject("location").get("lat").toString());
                info.append(",地理位置" + json.getJSONObject("result")
                .get("formatted_address").toString());

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tip.setText(info.toString());
                    }
                });
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 取消监听
        if( locationManager != null ){
            try {
                locationManager.removeUpdates(listener);
            }catch (SecurityException e){
                e.printStackTrace();
            }
        }
    }
}

 

三.所需权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

 

posted @ 2017-04-25 09:08  rorshach  阅读(710)  评论(0编辑  收藏  举报