안드로이드 개발 질문/답변
(글 수 45,052)
우선 소스는 아래와 같습니다.
public class CellID extends Activity
{
GsmCellLocation location;
int cellID, lac;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
location = (GsmCellLocation) tm.getCellLocation();
cellID = location.getCid();
lac = location.getLac();
Button btnDisplayMap = (Button) findViewById(R.id.displayMap);
btnDisplayMap.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
//---obtain the CellID and LAC of the device---
CellLocation.requestLocationUpdate();
cellID = location.getCid();
lac = location.getLac();
//---for testing only---
//cellID = 5496;
//lac = 6037;
//----------------------
try {
if (!displayMap(cellID, lac))
{
TextView t = (TextView) findViewById(R.id.status);
t.setText("Location not found!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private boolean displayMap(int cellID, int lac) throws Exception
{
String urlString = "http://www.google.com/glm/mmap";
//---open a connection to Google Maps API---
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setRequestMethod("POST");
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.connect();
//---write some custom data to Google Maps API---
OutputStream outputStream = httpConn.getOutputStream();
WriteData(outputStream, cellID, lac);
//---get the response---
InputStream inputStream = httpConn.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
//---interpret the response obtained---
dataInputStream.readShort();
dataInputStream.readByte();
int code = dataInputStream.readInt();
if (code == 0) {
double lat = (double) dataInputStream.readInt() / 1000000D;
double lng = (double) dataInputStream.readInt() / 1000000D;
dataInputStream.readInt();
dataInputStream.readInt();
dataInputStream.readUTF();
//---display Google Maps---
String uriString = "geo:" + lat
+ "," + lng;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(uriString));
startActivity(intent);
return true;
}
else
{
return false;
}
}
private void WriteData(OutputStream out, int cellID, int lac)
throws IOException
{
DataOutputStream dataOutputStream = new DataOutputStream(out);
dataOutputStream.writeShort(21);
dataOutputStream.writeLong(0);
dataOutputStream.writeUTF("en");
dataOutputStream.writeUTF("Android");
dataOutputStream.writeUTF("1.0");
dataOutputStream.writeUTF("Web");
dataOutputStream.writeByte(27);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(3);
dataOutputStream.writeUTF("");
dataOutputStream.writeInt(cellID);
dataOutputStream.writeInt(lac);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.flush();
}
}
GPS 로 위치를 찾지 못하였을 경우 CELL 방식으로 위치를 찾기위해 위에 소스를 참고 하였습니다.
그런데 원래 CELL 방식으로 위치 값 가져오는 것이 GPS로 가져오는 것 보다 더 어렵나요??
양재역 근처 실외에서 테스트 해봤는데 위치를 거의 가져오지 못 하더라구요.실내에서도 마찬가지구요.
혹시 위에 소스를 그대로 사용한는것이 아니라 수정해야 할 부분이 있는지
아님 CELL 방식으로 위치를 가져오는 다른 참고할 만한 소스나 사이트 알려주시면 정말 감사하겠습니다.
즐거운 추석 되시구요~^^



