阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1462|回复: 0

[转帖] 转帖]CDMA基站定位获取经纬度

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-1-17 09:30:46 | 显示全部楼层 |阅读模式
    public void onClick(View v) {
    // TODO Auto-generated method stub
    tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    //int type = tm.getNetworkType();
    //if (type ==TelephonyManager.NETWORK_TYPE_CDMA) {
    location = (CdmaCellLocation) tm.getCellLocation();
    if(location == null)
    return;
    int sid = location.getSystemId();//系统标识 mobileNetworkCode
    int bid = location.getBaseStationId();//基站小区号 cellId
    int nid = location.getNetworkId();//网络标识 locationAreaCode

    Log.i(\"sid:\", \"\" + sid);
    Log.i(\"bid:\", \"\" + bid);
    Log.i(\"nid:\", \"\" + nid);
    ArrayList<CellIDInfo> CellID = new ArrayList<CellIDInfo>();
    CellIDInfo info = new CellIDInfo();
    info.cellId = bid;
    info.locationAreaCode = nid;
    info.mobileNetworkCode = String.valueOf(sid);
    info.mobileCountryCode = tm.getNetworkOperator().substring(0, 3);
    info.mobileCountryCode = tm.getNetworkOperator().substring(3, 5);
    info.radioType = \"cdma\";
    CellID.add(info);
    Log.d(\"cellId:\", \"\" + info.cellId);
    Log.d(\"locationAreaCode:\", \"\" + info.locationAreaCode);
    Log.d(\"mobileNetworkCode:\", info.mobileNetworkCode);
    Log.d(\"mobileCountryCode:\", info.mobileCountryCode);
    Location loc = callGear(CellID);

    if (loc !=null)
    mTextView.setText(\"纬度:\" + loc.getLatitude() + \"\\n经度:\" + loc.getLongitude());
    //}// end if
    }// end onclick


    复制代码

    调用google gears的方法,该方法调用gears来获取经纬度 代码:

    //调用google gears的方法,该方法调用gears来获取经纬度
    private Location callGear(ArrayList<CellIDInfo> cellID) {
    if (cellID == null)
    return null;

    DefaultHttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(
    \"http://www.google.com/loc/json\");
    JSONObject holder = new JSONObject();

    try {
    holder.put(\"version\", \"1.1.0\");
    holder.put(\"host\", \"maps.google.com\");
    holder.put(\"home_mobile_country_code\", cellID.get(0).mobileCountryCode);
    holder.put(\"home_mobile_network_code\", cellID.get(0).mobileNetworkCode);
    holder.put(\"radio_type\", cellID.get(0).radioType);
    holder.put(\"request_address\", true);
    if (\"460\".equals(cellID.get(0).mobileCountryCode))
    holder.put(\"address_language\", \"zh_CN\");
    else
    holder.put(\"address_language\", \"en_US\");

    JSONObject data,current_data;

    JSONArray array = new JSONArray();

    current_data = new JSONObject();
    current_data.put(\"cell_id\", cellID.get(0).cellId);
    current_data.put(\"location_area_code\", cellID.get(0).locationAreaCode);
    current_data.put(\"mobile_country_code\", cellID.get(0).mobileCountryCode);
    current_data.put(\"mobile_network_code\", cellID.get(0).mobileNetworkCode);
    current_data.put(\"age\", 0);
    current_data.put(\"signal_strength\", -60);
    current_data.put(\"timing_advance\", 5555);
    array.put(current_data);

    holder.put(\"cell_towers\", array);

    StringEntity se = new StringEntity(holder.toString());
    Log.e(\"Location send\", holder.toString());
    post.setEntity(se);
    HttpResponse resp = client.execute(post);

    HttpEntity entity = resp.getEntity();

    BufferedReader br = new BufferedReader(
    new InputStreamReader(entity.getContent()));
    StringBuffer sb = new StringBuffer();
    String result = br.readLine();
    while (result != null) {
    Log.e(\"Locaiton reseive\", result);
    sb.append(result);
    result = br.readLine();
    }

    data = new JSONObject(sb.toString());
    Log.d(\"-\", sb.toString());
    data = (JSONObject) data.get(\"location\");

    Location loc = new Location(LocationManager.NETWORK_PROVIDER);
    loc.setLatitude((Double) data.get(\"latitude\"));
    loc.setLongitude((Double) data.get(\"longitude\"));
    loc.setAccuracy(Float.parseFloat(data.get(\"accuracy\").toString()));
    loc.setTime( System.currentTimeMillis());//AppUtil.getUTCTime());
    return loc;
    } catch (JSONException e) {
    e.printStackTrace();
    return null;
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (ClientProtocolException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    Log.d(\"-\", \"null 1\");
    return null;
    }


    复制代码

    在弄这个的时候不要忘了加权限噢!

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


    复制代码

    程序只是测试用,尚不完善!希望这个东东对需要的朋友有用!有什么不对的地方请大家指点指点。
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表