2011-08-15 67 views
1

我正在寫一個程序來獲取手機使用電話管理器的座標,問題是,它給了我最接近我的手機信號塔的座標,但不是確切的位置我是。這是我的代碼。如何使用細胞塔的coordiantes給我我的位置。感謝名單傢伙手機的位置

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

你會需要的所有附近的手機基站的座標,這樣你就可以做一些基本的三角...或不使用手機信號塔數據,去GPS座標。 –

+1

如果你想在手機的位置非常接近的修復,你最好使用GPS。如果您必須使用手機信號塔,那麼我建議您研究三角測量。 –

+0

這不是你想要的。 @Marco描述了使用'LocationManager' –

回答

1

對於您需要使用GPS,一個不太準確的位置,您可以使用NETWORK_PROVIDER(不同的精度取決於蜂窩聯播網,密度)的確切位置。 我認爲你可能需要在OnCreate

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

或網絡供應商定義的LocationManager:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

這個類提供對系統的訪問定位服務。這些服務允許應用程序定期更新設備的地理位置,或者在設備進入特定地理位置附近時觸發應用程序指定的意圖。

馬爾科

+0

我想要一個也適用於室內的解決方案,GPS只適用於室外 – Nikud