2011-08-15 26 views
1

携帯電話がテレフォニーマネージャを使用している場所の座標を取得するプログラムを作成していますが、問題はそれが私に最も近いセルタワーの座標を示していますが、わたし。ここに私のコードです。どのように私の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();  
    } 
} 
+2

あなたはセルタワーのデータを使用し、GPS座標のために行くあなたには、いくつかの基本的な三角測量を行うことができますので、すべての近くの携帯電話のアンテナ塔の座標を必要とする...かと思います。 –

+1

携帯電話の場所に非常に近い問題を解決したい場合は、GPSを使う方がよいでしょう。セルタワーを使用する必要がある場合は、私は三角測量を調べることをお勧めします。 –

+0

これはあなたが望むものではありません。 @Marcoが説明しているように 'LocationManager'を使用してください –

答えて

1

ありがとう。 私はあなたがの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

関連する問題