J'écris un programme qui obtient les coordonnées de l'endroit où un téléphone portable utilise le gestionnaire de téléphonie, le problème est, il me donne les coordonnées de la tour cellulaire à laquelle je suis le plus proche mais pas l'endroit exact où Je suis. Voici mon code. Comment utiliser les coordonnées de la tour cellulaire pour me donner mon emplacement exct. les gars ThanxEmplacement du téléphone portable
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();
}
}
vous auriez besoin les coordonnées de toutes les tours de téléphonie cellulaire à proximité afin que vous puissiez faire une triangulation de base ... ou ne pas utiliser les données de la tour cellulaire et aller pour les coordonnées GPS. –
Si vous voulez une solution très précise sur l'emplacement d'un téléphone portable, vous feriez mieux d'utiliser le GPS. Si vous devez utiliser des tours de téléphonie cellulaire, je vous suggérerais d'examiner la triangulation. –
Ce n'est pas ce que vous voulez. Utilisez le 'LocationManager' comme décrit par @Marco –