分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

http://www.cnblogs.com/gongcb/archive/2012/05/10/2494559.html


Android进阶篇-百度地图获取地理信息

Android中获取用户的地理信息的方式有很多种,各有各得优点和缺点。

这里主要介绍的方法是通过调用百度提供的地图API获取用户的地理位置信息。

首要不可缺少的还是百度提供的标准Application类

public class BMapApiApplication extends Application {        public static BMapApiApplication mDemoApp;        public static float mDensity;        //百度MapAPI的管理类    public BMapManager mBMapMan = null;        // 授权Key    // TODO: 请输入您的Key,    // 申请地址:http://dev.baidu.com/wiki/static/imap/key/    public String mStrKey = "F9FBF9FAA9BA37C0C6085BD280723A659EC51B20";    public boolean m_bKeyRight = true;    // 授权Key正确,验证通过        // 常用事件监听,用来处理通常的网络错误,授权验证错误等    public static class MyGeneralListener implements MKGeneralListener {        @Override        public void onGetNetworkState(int iError) {            Toast.makeText(BMapApiApplication.mDemoApp.getApplicationContext(), "您的网络出错啦!",                    Toast.LENGTH_LONG).show();        }        @Override        public void onGetPermissionState(int iError) {            if (iError ==  MKEvent.ERROR_PERMISSION_DENIED) {                // 授权Key错误:                Toast.makeText(BMapApiApplication.mDemoApp.getApplicationContext(),                         "请在BMapApiDemoApp.java文件输入正确的授权Key!",                        Toast.LENGTH_LONG).show();                BMapApiApplication.mDemoApp.m_bKeyRight = false;            }        }            }        @Override    public void onCreate() {        mDemoApp = this;        mBMapMan = new BMapManager(this);        mBMapMan.init(this.mStrKey, new MyGeneralListener());                mDensity = getResources().getDisplayMetrics().density;                super.onCreate();    }        @Override    //建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗    public void onTerminate() {        // TODO Auto-generated method stub        if (mBMapMan != null) {            mBMapMan.destroy();            mBMapMan = null;        }        super.onTerminate();    }}

然后是通过注册百度地图调用相应的接口获取经纬度获取相应的信息

/** Called when the activity is first created. */    /** 上下文 */    private BMapApiApplication mApplication;    /** 定义搜索服务类 */    private MKSearch mMKSearch;        /** 记录当前经纬度的MAP*/    private HashMap mCurLocation = new HashMap();    //城市名    private String cityName;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                mApplication = (BMapApiApplication) this.getApplication();        if (mApplication.mBMapMan == null) {            mApplication.mBMapMan = new BMapManager(getApplication());            mApplication.mBMapMan.init(mApplication.mStrKey,                    new BMapApiApplication.MyGeneralListener());        }                /** 初始化MKSearch */        mMKSearch = new MKSearch();        mMKSearch.init(mApplication.mBMapMan, new MySearchListener());    }        @Override    protected void onStart() {        // TODO Auto-generated method stub        super.onStart();        this.registerLocationListener();    }    private void registerLocationListener() {        mApplication.mBMapMan.getLocationManager().requestLocationUpdates(                mLocationListener);        if (mApplication.mBMapMan != null) {            /** 开启百度地图API */            mApplication.mBMapMan.start();        }    }    @Override    protected void onStop() {        // TODO Auto-generated method stub        super.onStop();        this.unRegisterLocationListener();    }    private void unRegisterLocationListener() {        mApplication.mBMapMan.getLocationManager().removeUpdates(                mLocationListener);        if (mApplication.mBMapMan != null) {            /** 终止百度地图API */            mApplication.mBMapMan.stop();        }    }    @Override    protected void onDestroy() {        if (mApplication.mBMapMan != null) {            /** 程序退出前需调用此方法 */            mApplication.mBMapMan.destroy();            mApplication.mBMapMan = null;        }        super.onDestroy();    }    /** 注册定位事件 */    private LocationListener mLocationListener = new LocationListener() {        @Override        public void onLocationChanged(Location location) {            // TODO Auto-generated method stub            if (location != null) {                try {                    int longitude = (int) (1000000 * location.getLongitude());                    int latitude = (int) (1000000 * location.getLatitude());                    /** 保存当前经纬度 */                    mCurLocation.put("longitude", location.getLongitude());                    mCurLocation.put("latitude", location.getLatitude());                    GeoPoint point = new GeoPoint(latitude, longitude);                    /** 查询该经纬度值所对应的地址位置信息 */                    Weather_WelcomeActivity.this.mMKSearch                            .reverseGeocode(new GeoPoint(latitude, longitude));                } catch (Exception e) {                    e.printStackTrace();                }            }        }    };    /** 内部类实现MKSearchListener接口,用于实现异步搜索服务 */    private class MySearchListener implements MKSearchListener {        @Override        public void onGetAddrResult(MKAddrInfo result, int iError) {            if( iError != 0 || result == null){                Toast.makeText(Weather_WelcomeActivity.this, "获取地理信息失败", Toast.LENGTH_LONG).show();            }else {                Log.info("json", "result= " + result);                cityName =result.addressComponents.city;                Bundle bundle = new Bundle();                bundle.putString("cityName", cityName.substring(0, cityName.lastIndexOf("")));                Intent intent = new Intent(Weather_WelcomeActivity.this,Weather_MainActivity.class);                intent.putExtras(bundle);                startActivity(intent);                Weather_WelcomeActivity.this.finish();            }        }        @Override        public void onGetDrivingRouteResult(MKDrivingRouteResult result,                int iError) {        }        @Override        public void onGetPoiResult(MKPoiResult result, int type, int iError) {        }        @Override        public void onGetTransitRouteResult(MKTransitRouteResult result,                int iError) {        }        @Override        public void onGetWalkingRouteResult(MKWalkingRouteResult result,                int iError) {        }    }

其他方式获取当前的城市名:

/**     * 抓取当前的城市信息     *      * @return String 城市名     */    public String getCurrentCityName(){        String city = "";        TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);        GsmCellLocation glc = (GsmCellLocation) telManager.getCellLocation();                if (glc != null){            int cid = glc.getCid(); // value 基站ID号            int lac = glc.getLac();// 写入区域代码            String strOperator = telManager.getNetworkOperator();            int mcc = Integer.valueOf(strOperator.substring(0, 3));// 写入当前城市代码            int mnc = Integer.valueOf(strOperator.substring(3, 5));// 写入网络代码            String getNumber = "";            getNumber += ("cid:" + cid + "\n");            getNumber += ("cid:" + lac + "\n");            getNumber += ("cid:" + mcc + "\n");            getNumber += ("cid:" + mnc + "\n");            DefaultHttpClient client = new DefaultHttpClient();            BasicHttpParams params = new BasicHttpParams();            HttpConnectionParams.setSoTimeout(params, 20000);            HttpPost post = new HttpPost("http://www.google.com/loc/json");                        try{                JSONObject jObject = new JSONObject();                jObject.put("version", "1.1.0");                jObject.put("host", "maps.google.com");                jObject.put("request_address", true);                if (mcc == 460)                    jObject.put("address_language", "zh_CN");                else                    jObject.put("address_language", "en_US");                JSONArray jArray = new JSONArray();                JSONObject jData = new JSONObject();                jData.put("cell_id", cid);                jData.put("location_area_code", lac);                jData.put("mobile_country_code", mcc);                jData.put("mobile_network_code", mnc);                jArray.put(jData);                jObject.put("cell_towers", jArray);                StringEntity se = new StringEntity(jObject.toString());                post.setEntity(se);                HttpResponse resp = client.execute(post);                BufferedReader br = null;                if (resp.getStatusLine().getStatusCode() == HttpStatus.SC_OK){                    br = new BufferedReader(new InputStreamReader(resp                            .getEntity().getContent()));                    StringBuffer sb = new StringBuffer();                    String result = br.readLine();                    while (result != null){                        sb.append(getNumber);                        sb.append(result);                        result = br.readLine();                    }                    String s = sb.toString();                    s = s.substring(s.indexOf("{"));                    JSONObject jo = new JSONObject(s);                    JSONObject arr = jo.getJSONObject("location");                    JSONObject address = arr.getJSONObject("address");                    city = address.getString("city");                }            }            catch (JSONException e){                e.printStackTrace();            }            catch (UnsupportedEncodingException e){                e.printStackTrace();            }            catch (ClientProtocolException e){                e.printStackTrace();            }            catch (IOException e){                e.printStackTrace();            }            finally{                post.abort();                client = null;            }        }        return city;    }

 加入这两个权限:

    "android.permission.INTERNET"/>    "android.permission.ACCESS_COARSE_LOCATION"/>

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

更多相关文章

  1. Android进阶篇-百度地图获取地理信息
  2. Android中,单位dp、sp、px互相转换工具类
  3. Android(安卓)系统剪贴板的使用 - 复制、获取和清空
  4. 【Tech-Android-View】Android中可以使用的网络音乐资源(榜单 歌
  5. 安卓模拟器Android(安卓)SDK Manager 无法获取SDK列表的解决办法
  6. Android使用criteria选择合适的地理位置服务实现方法
  7. 史上最全的常用开发工具类收集(持续更新中)
  8. 基于XMPP实现的Openfire的配置安装+Android客户端的实现
  9. Android(安卓)log日志信息获取

随机推荐

  1. android中做网络请求的几种方式
  2. Android(安卓)调用系统短信 - 群发
  3. Android发送邮件到指定邮箱(可带附件)
  4. Android使用Intent传值注意(传递Bean对象)
  5. Android自定义炫酷进度条(闪电能量条)
  6. Android 性能优化之内存优化
  7. Android 布局管理器 之 RelativeLayout&F
  8. Android uiautomator实例使用
  9. Android设置Activity全屏和无标题
  10. Android Material design 之 BottomNavig