ti-enxame.com

Obtenha a localização atual do usuário no Android sem usar o GPS ou a Internet

É possível obter a localização atual do usuário sem usar o GPS ou a internet? Quero dizer, com a ajuda do provedor de rede móvel.

86
Prabhu M

O que você está procurando fazer é obter a posição usando o LocationManager.NETWORK_PROVIDER em vez de LocationManager.GPS_PROVIDER. O NETWORK_PROVIDER será resolvido no GSM ou Wi-Fi, sempre disponível. Obviamente, com o Wi-Fi desligado, o GSM será usado. Tenha em mente que o uso da rede celular é preciso para basicamente 500m. 

http://developer.Android.com/guide/topics/location/obtaining-user-location.html tem algumas informações realmente boas e exemplos de código.

Depois que você terminar com a maior parte do código em OnCreate(), adicione isto:

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

Você também pode fazer com que sua atividade implemente a classe LocationListener e, assim, implemente onLocationChanged() em sua atividade.

80
Ian

Obtendo o getLastKnownLocation você realmente não inicia uma correção você mesmo.

Esteja ciente de que este poderia iniciar o provedor, mas se o usuário já obteve um local antes, eu não acho que vai. Os documentos não são muito claros sobre isso.

De acordo com os documentos getLastKnownLocation:

Retorna um local indicando os dados da última localização conhecida Correção obtida do provedor fornecido. Isso pode ser feito sem Iniciando o provedor.

Aqui está um trecho rápido:

import Android.content.Context;
import Android.location.Location;
import Android.location.LocationManager;
import Java.util.List;

public class UtilLocation {
    public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        Location utilLocation = null;
        List<String> providers = manager.getProviders(enabledProvidersOnly);
        for(String provider : providers){

            utilLocation = manager.getLastKnownLocation(provider);
            if(utilLocation != null) return utilLocation;
        }
        return null;
    }
}

Você também precisa adicionar uma nova permissão para AndroidManifest.xml

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
14
hwrdprkns

Aqui é possível obter a localização atual do usuário sem o uso de GPS e provedor de rede.

1 Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap" 

2. Clique aqui para sua referência

4
Mahendran Candy
boolean gps_enabled = false;
boolean network_enabled = false;

LocationManager lm = (LocationManager) mCtx
                .getSystemService(Context.LOCATION_SERVICE);

gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Location net_loc = null, gps_loc = null, finalLoc = null;

if (gps_enabled)
    gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
    net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

if (gps_loc != null && net_loc != null) {

    //smaller the number more accurate result will
    if (gps_loc.getAccuracy() > net_loc.getAccuracy()) 
        finalLoc = net_loc;
    else
        finalLoc = gps_loc;

        // I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)

} else {

    if (gps_loc != null) {
        finalLoc = gps_loc;
    } else if (net_loc != null) {
        finalLoc = net_loc;
    }
}
3
Makvin

Não, atualmente você não pode obter a localização sem usar o GPS ou a Internet. 

Técnicas de localização baseadas em Wi-Fi, celular ou Bluetooth funcionam com a ajuda de um grande banco de dados constantemente atualizado. Um dispositivo procura por IDs do transmissor e envia-as em uma consulta através da Internet para um serviço como o Google, a Apple ou o Skyhook. Esse serviço responde com um local baseado em pesquisas sem fio anteriores de locais conhecidos. Sem acesso à internet, você precisa ter uma cópia local desse banco de dados e mantê-lo atualizado. Para uso global, isso é muito impraticável. 

Teoricamente, uma operadora de telefonia móvel poderia fornecer apenas serviços de dados locais, mas sem acesso à Internet, e depois responder a consultas de localização a partir de dispositivos móveis. Provedores móveis não fazem isso; ninguém quer pagar por esse tipo de acesso restrito a dados. Se você tiver serviço de dados através de sua operadora de celular, então você tem acesso à Internet. 

Em suma, usando LocationManager.NETWORK_PROVIDER ou Android.hardware.location.network para obter a localização requer o uso da internet. 

A utilização da última posição conhecida exige que você tenha acesso a GPS ou à Internet muito recentemente. Se você acabou de ter internet, presumivelmente você pode ajustar sua posição ou configurações para obter internet novamente. Se o seu dispositivo não tiver GPS ou acesso à Internet, o último recurso de posição conhecida não ajudará você. 

Sem GPS ou internet, você poderia: 

  1. Tire fotos do céu noturno e use a hora atual para estimar sua localização com base em um gráfico em estrela. Isso provavelmente exigiria equipamentos adicionais para garantir que os ângulos das imagens sejam corretamente medidos. 
  2. Use um acelerômetro para rastrear a localização a partir de uma posição conhecida. O acúmulo de erros neste tipo de abordagem torna impraticável para a maioria das situações. 
2
mattm

Você pode usar o TelephonyManager para fazer isso.

0
Shubham Gupta Ggps

Você deu uma olhada no Google Maps Geolocation Api? Google Geolocation de mapa

Isso é simples RestApi, você só precisa de POST uma solicitação, o serviço retornará um local com precisão em metros.

0
raditya gumay