안드로이드의 기지국 포지셔닝 실현
모든 기지국은 자신의 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
"/>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.