携帯電話がテレフォニーマネージャを使用している場所の座標を取得するプログラムを作成していますが、問題はそれが私に最も近いセルタワーの座標を示していますが、わたし。ここに私のコードです。どのように私のexctの場所を与えるためにセルタワーのcoordiantesを使用します。あなたはNETWORK_PROVIDER(細胞neworkの密度に応じて変化する精度を)使用することができ少ない正確な位置のために、GPSを使用する必要があり、正確な位置のための人携帯電話の場所
package com.celllocation;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.widget.TextView;
import android.widget.Toast;
public class cellLocation extends Activity {
int cellID,lac;
TextView textViewCoord;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textViewCoord=(TextView)findViewById(R.id.textViewCoord);
}
@Override
protected void onStart() {
TelephonyManager telManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation location=(GsmCellLocation)telManager.getCellLocation();
cellID=location.getCid();
lac=location.getLac();
try
{
displayMap(cellID, lac);
}
catch(Exception e){
e.printStackTrace();
}
super.onStart();
}
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 =lat+ "," + lng;
Toast.makeText(getApplicationContext(), uriString, Toast.LENGTH_LONG).show();
textViewCoord.setText(uriString);
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座標のために行くあなたには、いくつかの基本的な三角測量を行うことができますので、すべての近くの携帯電話のアンテナ塔の座標を必要とする...かと思います。 –
携帯電話の場所に非常に近い問題を解決したい場合は、GPSを使う方がよいでしょう。セルタワーを使用する必要がある場合は、私は三角測量を調べることをお勧めします。 –
これはあなたが望むものではありません。 @Marcoが説明しているように 'LocationManager'を使用してください –