안드로이드의 기지국 포지셔닝 실현

3901 단어
1. 기지국은 바로 우리가 핸드폰을 켤 때 핸드폰은 자동으로 신호가 가장 강한 무선 통신에 연락하고 정보를 등록한다. 이 통신이 바로 우리가 말한 기지국이다.
모든 기지국은 자신의 ID를 가지고 있다. 우리는 이 기지국의 ID를 통해 기지국의 위치(경위도)를 찾을 수 있고 국내 도시의 기지국 밀도는 500미터 이하이거나 더 낮을 수 있기 때문에 문제를 풀고 우리의 위치를 확정할 수 있다. 만약에 대략적인 포지셔닝을 한다면 선택할 수 있다.만약에 정확한 포지셔닝을 하려면 GPS로 포지셔닝을 해야 하는데 GPS 포지셔닝은 단점이 있어서 실내에서 포지셔닝을 할 수 없다. 이런 경우 와이파이를 사용하는 포지셔닝을 고려할 수 있다. 물론 이런 것들은 본고에서 기술하고자 하는 내용인지 다음에 기지국의 포지셔닝을 어떻게 실현하는지 살펴보자.
2. 준비된 도구와 작업:
Telephony Manager 클래스: 주로 휴대전화 통신과 관련된 상태와 정보를 제공합니다.휴대전화 SIM카드의 상태와 정보, 통신사 네트워크의 상태와 휴대전화 사용자의 정보를 포함한다.
GsmcellLocation 클래스:전재
Telephony Manager에서 get에 대한 정보입니다.
JSONObject, JSONarray: 얻은 정보 그룹을 json 데이터로 만들어 저장하고 해석할 수 있도록 합니다.
관련 휴대전화 상태, 인터넷 관련 시스템 권한(uses-permission)이 필요하다.
        
3. 구체적 실현:
        1.기지국 정보 얻기
        TelephonyManager  mTManager  =  (
TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
       
 //       ,   private     
 public String getCellTowersInfo(){
getMobileInfo();  //         
JSONObject object = getJSONObjectInfo();  //          jsonobject  
String result = getTelephoneInfo(object); //              
return result;
}
private void getMobileInfo()
{

GsmCellLocation gcl = (GsmCellLocation) mTManager.getCellLocation();
int cellId = gcl.getCid();  //   ID 
int lac = gcl.getLac(); // location area code
// mobile country code, CDMA         ,  getPhoneType()   
int mcc = Integer.valueOf(mTManager.getNetworkOperator()
.substring(0, 3));
// mobile network code, CDMA         ,  getPhoneType()   
int mnc = Integer.valueOf(mTManager.getNetworkOperator()
.substring(3, 5));

setCellId(cellId);
setLac(lac);
setMcc(mcc);
setMnc(mnc);
}
private JSONObject getJSONObjectInfo(){
JSONObject object = null;
try
{
object = new JSONObject();
object.put("version", "1.1.0");
object.put("host", "maps.google.com");
object.put("request_address", true);
if(mcc == 460){
object.put("address_language", "zh_CN");
}else{
object.put("address_language", "en_US");
}
JSONArray array = new JSONArray();
JSONObject data = new JSONObject();
data.put("cellId", cellId);
data.put("location_area_code", lac);
data.put("mobile_country_code", mcc);
data.put("mobile_network_code", mnc);
array.put(data);
object.put("cell_towers", array);
} catch (JSONException e)
{
e.printStackTrace();
}
return object;
}
private String getTelephoneInfo(JSONObject object){
//    ,         
try
{
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.google.com/loc/json");
StringEntity entity = new StringEntity(object.toString());
post.setEntity(entity);
HttpResponse response = client.execute(post);
BufferedReader br = null;
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  //      value 200
br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));;
StringBuffer sb = new StringBuffer();
String result = br.readLine();
while(result != null){
sb.append(result);
result = br.readLine();
}
br.close();
return sb.toString();
}else{
return "      ";
}
}catch (UnsupportedEncodingException e)
{
e.printStackTrace();
} catch (ClientProtocolException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return null;
}

}
        2. 마지막으로 잊지 마세요.
AndroidMenifest.xml에 권한 추가하기
        <
uses-permission android:="
android.permission.INTERNET "/>
        <
uses-permission
 android:="
android.permission.ACCESS_COARSE_LOCATION
"/> --
>
        <
uses-permission
 android:="
android.permission.READ_PHONE_STATE
"/>

좋은 웹페이지 즐겨찾기