1

私は携帯電話がテレフォニーマネージャーを使用している場所の座標を取得するプログラムを書いています。問題は、私に最も近いセルタワーの座標を取得しますが、私がいる正確な場所は取得しません。これが私のコードです。セルタワーの座標をどのように使用して、私のexctの場所を教えてくれますか。みんなありがとう

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

1 に答える 1

1

GPS を使用する必要がある正確な位置については、精度の低い位置については NETWORK_PROVIDER を使用できます (セルラー ネットワークの密度に応じて精度が異なります)。onCreate で LocationManager を定義する必要があるかもしれないと思います

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

またはネットワークプロバイダーの場合:

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

このクラスは、システム ロケーション サービスへのアクセスを提供します。これらのサービスにより、アプリケーションはデバイスの地理的位置の定期的な更新を取得したり、デバイスが特定の地理的位置の近くに入ったときにアプリケーション指定のインテントを起動したりできます。

マルコ

于 2011-08-15T16:09:53.107 に答える