• 使用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" />
  • 相关阅读:
    python中的json
    vmware workstation中的NAT配置
    python内置的一些模块
    datetime
    线程池的工作过程示例
    java io read中申请读的长度与实际长度不同|RocketMQ源码
    RocketMQ集群搭建及安装rocketmq-console
    使用MAT分析JVM内存溢出
    jdbcTemplate小用总结
    Spring线程安全为何非安全,场景重现,解决安全小结
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6760202.html
Copyright © 2020-2023  润新知