在房子里如何获取Android GPS位置
当一个人呆在房子里时,我需要得到他的gps位置 GPS在室内不工作,但我听到有人解释说,在安卓系统中,你应该首先检查GPS是否可用。如果不是的话,下一步将是根据附近的无线网络定位此人 我对这个很陌生,我计划用钛合金开发一个简单的应用程序。我的问题是:在房子里如何获取Android GPS位置,android,gps,titanium,Android,Gps,Titanium,当一个人呆在房子里时,我需要得到他的gps位置 GPS在室内不工作,但我听到有人解释说,在安卓系统中,你应该首先检查GPS是否可用。如果不是的话,下一步将是根据附近的无线网络定位此人 我对这个很陌生,我计划用钛合金开发一个简单的应用程序。我的问题是: 当gps不可用时,你能基于无线网络定位某人吗?我能知道大楼里人的位置吗 您向位置提供商询问最佳提供商,如果GPS不可用,您将从cellID(移动桅杆)或无线网络获取位置,请参阅和相关stackoverflow您向位置提供商询问最佳提供商,如果GPS
当gps不可用时,你能基于无线网络定位某人吗?我能知道大楼里人的位置吗 您向位置提供商询问最佳提供商,如果GPS不可用,您将从cellID(移动桅杆)或无线网络获取位置,请参阅和相关stackoverflow您向位置提供商询问最佳提供商,如果GPS不可用,您将从cellID(移动桅杆)或无线网络获取位置,请参阅和相关的stackoverflow似乎是一个良好的开端,我希望此代码可以帮助:
try {
gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
// don't start listeners if no provider is enabled
if (!gps_enabled && !network_enabled) {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("Attention!");
builder.setMessage("Sorry, location is not determined. Please enable location providers");
builder.create().show();
}
if (gps_enabled) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
从这里开始:似乎是一个好的开始,我希望这段代码可以帮助:
try {
gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
// don't start listeners if no provider is enabled
if (!gps_enabled && !network_enabled) {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("Attention!");
builder.setMessage("Sorry, location is not determined. Please enable location providers");
builder.create().show();
}
if (gps_enabled) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
从这里开始:一个选项是Skyhook。这里是他们SDK的链接。它与android兼容。这不会像GPS那样精确,但它至少会让你在大部分时间内进入正确的建筑物
一个选项是Skyhook。这里是他们SDK的链接。它与android兼容。这不会像GPS那样精确,但它至少会让你在大部分时间内进入正确的建筑物
您可以在任何想要获取cellID位置的地方调用下面的cellID函数。它不会像GPS那样精确
public void cellID()
{
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
int cid = cellLocation.getCid();
int lac = cellLocation.getLac();
SimpleDateFormat sdfDateTime = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
datetimeCellID = sdfDateTime.format(new Date());
String cell_Id=String.valueOf(cid);
String gsm_Loc_Area_Code=String.valueOf(lac);
// Toast.makeText(getBaseContext(),"cellid="+cell_Id+"\nGsm Location Area Code:"+gsm_Loc_Area_Code,Toast.LENGTH_LONG ).show();
if(RqsLocation(cid, lac))
{
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
imeiCellID = tm.getDeviceId();
latitude_cellID=String.valueOf((float)myLatitude/1000000);
longitude_cellID=String.valueOf((float)myLongitude/1000000);
// Toast.makeText(getBaseContext(),"Lat:"+latitude_cellID+"Long:"+longitude_cellID,Toast.LENGTH_LONG ).show();
}//if
else
{
Toast.makeText(getBaseContext(),"CellID : Can't find Location",Toast.LENGTH_LONG ).show();
}//else
}
}//细胞
private Boolean RqsLocation(int cid, int lac)
{
//Toast.makeText(getBaseContext(),"inReqloc",Toast.LENGTH_LONG ).show();
Boolean result = false;
String urlmmap = "http://www.google.com/glm/mmap";
try {
URL url = new URL(urlmmap);
URLConnection conn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setRequestMethod("POST");
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.connect();
OutputStream outputStream = httpConn.getOutputStream();
WriteData(outputStream, cid, lac);
InputStream inputStream = httpConn.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
dataInputStream.readShort();
dataInputStream.readByte();
int code = dataInputStream.readInt();
if (code == 0)
{
myLatitude = dataInputStream.readInt();
myLongitude = dataInputStream.readInt();
result = true;
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
private void WriteData(OutputStream out, int cid, 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(cid);
dataOutputStream.writeInt(lac);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.flush();
}
您可以在任何想要获取cellID位置的地方调用下面的cellID函数。它不会像GPS那样精确
public void cellID()
{
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
int cid = cellLocation.getCid();
int lac = cellLocation.getLac();
SimpleDateFormat sdfDateTime = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
datetimeCellID = sdfDateTime.format(new Date());
String cell_Id=String.valueOf(cid);
String gsm_Loc_Area_Code=String.valueOf(lac);
// Toast.makeText(getBaseContext(),"cellid="+cell_Id+"\nGsm Location Area Code:"+gsm_Loc_Area_Code,Toast.LENGTH_LONG ).show();
if(RqsLocation(cid, lac))
{
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
imeiCellID = tm.getDeviceId();
latitude_cellID=String.valueOf((float)myLatitude/1000000);
longitude_cellID=String.valueOf((float)myLongitude/1000000);
// Toast.makeText(getBaseContext(),"Lat:"+latitude_cellID+"Long:"+longitude_cellID,Toast.LENGTH_LONG ).show();
}//if
else
{
Toast.makeText(getBaseContext(),"CellID : Can't find Location",Toast.LENGTH_LONG ).show();
}//else
}
}//细胞
private Boolean RqsLocation(int cid, int lac)
{
//Toast.makeText(getBaseContext(),"inReqloc",Toast.LENGTH_LONG ).show();
Boolean result = false;
String urlmmap = "http://www.google.com/glm/mmap";
try {
URL url = new URL(urlmmap);
URLConnection conn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setRequestMethod("POST");
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.connect();
OutputStream outputStream = httpConn.getOutputStream();
WriteData(outputStream, cid, lac);
InputStream inputStream = httpConn.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
dataInputStream.readShort();
dataInputStream.readByte();
int code = dataInputStream.readInt();
if (code == 0)
{
myLatitude = dataInputStream.readInt();
myLongitude = dataInputStream.readInt();
result = true;
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
private void WriteData(OutputStream out, int cid, 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(cid);
dataOutputStream.writeInt(lac);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.flush();
}
这需要多精确?你是否只需要知道某人在哪个街区,或者你需要知道某人在一英尺左右的地方?这需要多准确?你只需要知道某人在哪个街区,还是需要知道某人在一英尺左右的地方?