在房子里如何获取Android GPS位置

在房子里如何获取Android GPS位置,android,gps,titanium,Android,Gps,Titanium,当一个人呆在房子里时,我需要得到他的gps位置 GPS在室内不工作,但我听到有人解释说,在安卓系统中,你应该首先检查GPS是否可用。如果不是的话,下一步将是根据附近的无线网络定位此人 我对这个很陌生,我计划用钛合金开发一个简单的应用程序。我的问题是: 当gps不可用时,你能基于无线网络定位某人吗?我能知道大楼里人的位置吗 您向位置提供商询问最佳提供商,如果GPS不可用,您将从cellID(移动桅杆)或无线网络获取位置,请参阅和相关stackoverflow您向位置提供商询问最佳提供商,如果GPS

当一个人呆在房子里时,我需要得到他的gps位置

GPS在室内不工作,但我听到有人解释说,在安卓系统中,你应该首先检查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();    
  }  

这需要多精确?你是否只需要知道某人在哪个街区,或者你需要知道某人在一英尺左右的地方?这需要多准确?你只需要知道某人在哪个街区,还是需要知道某人在一英尺左右的地方?