2012-03-29 5 views
2

Ich brauche die GPS-Position einer Person, wenn es in einem Haus bleibt.So erhalten Android GPS-Standort, wenn in einem Haus

GPS funktioniert nicht im Haus, aber ich hörte jemanden erklären, dass in Android Sie zuerst überprüfen sollten, ob GPS verfügbar ist. Wenn nicht, wäre der nächste Schritt, die Person basierend auf den nahen drahtlosen Netzwerken zu lokalisieren.

Ich bin ziemlich neu, und ich habe vor, eine einfache App in Titan zu entwickeln. Meine Frage ist: Können Sie jemanden lokalisieren, der auf dem drahtlosen Netzwerk basiert, wenn GPS nicht verfügbar ist? Kann ich den Standort von Personen in Gebäuden finden?

+0

Wie genau ist diese Notwendigkeit zu sein? Müssen Sie nur herausfinden, in welcher Gegend jemand ist, oder müssen Sie innerhalb eines Fußes wissen, wo jemand ist? – Brad

Antwort

0

Sie bitten, den Standortanbieter für die besten Anbieter, wenn GPS nicht verfügbar ist, werden Sie Standort von CELLID (mobiler Mast) oder Wireless-Netzwerk erhalten, siehe this und zugehörigen Stackoverflow question

0

scheint einen guten Anfang zu sein, ich dieser Code hoffen helfen können:

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); 
     } 

Von hier aus: http://www.hrupin.com/2011/04/android-gps-using-how-to-get-current-location-example

0

können Sie unter CELLID Funktion aufrufen, wo immer Sie CELLID Standort erhalten möchten. Es wird nicht so genau sein wie

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 
    } 

} GPS // CELLID

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();  
    }