Obtener Latitud y Longitud sin insertar la tarjeta SIM y de inicio / parada de los Gps de la Solicitud

StackOverflow https://stackoverflow.com/questions/4375913

  •  09-10-2019
  •  | 
  •  

Pregunta

Estoy tratando de ir a buscar la latitud y longitud GPS, pero estoy teniendo una consulta que siempre que intente a buscar Lat y Larga sin tarjeta SIM, no se proporciona ninguna información en cuanto inserto mi tarjeta SIM, que me ofrece toda la información de manera deseada.

LocationManager mlocManager = 
    (LocationManager) getSystemService(Context.LOCATION_SERVICE);

LocationListener mlocListener = new MyLocationListener();

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                                   0, 0, mlocListener);

se puede ver, aunque yo estoy usando GPS_PROVIDER, no me está dando Latitud y Larga sin la ayuda del operador de red, puede alguien tel?


Otra cosa es cómo iniciar y detener el GPS de un medio de aplicación que desea iniciar GPS después de determinado tiempo y que tan pronto me sale beslocation, puedo apagarlo.

¿Fue útil?

Solución

No es necesario tener acceso a cualquier red para obtener una ubicación GPS en Android. Pero una velocidad de conexión a Internet-up del reajuste de la ubicación de unos 5 minutos y 5 segundos (aproximadamente)! Esta mejora es traído por -Assisted GPS (A-GPS) , en contraposición a autónomo-GPS .

GPS móviles (incluyendo los dispositivos Android) comprobar si una conexión de red disponible. Si es así, se descarga datos de asistencia y el servidor de A-GPS y lo utilizan para calcular el reajuste de la ubicación con el chipset GPS. Si no es así, el conjunto de chips de GPS tiene que descargar los datos desde un satélite GPS, que lleva mucho tiempo (tasa es 50 los bits por segundo!). El proceso también se puede acelerar si una ubicación GPS se ha calculado no hace mucho tiempo.

Así que, primero:

  • Compruebe que ha añadido ACCESS_FINE_LOCATION a los permisos de su manifiesto
  • comprobación de que los satélites GPS están habilitadas en la configuración del teléfono
  • Asegúrese de que no está dentro de casa (señales de los satélites por encima de 20.000 kilometros no les gusta techos y paredes)

A continuación, iniciar la aplicación y espera, no puede haber unos pocos minutos antes de la primera revisión está disponible.

En cuanto a poner en marcha el GPS de su aplicación, parece posible (ver ¿Cómo puedo permitir que I o desactivar el GPS mediante programación en Android? ), pero no sé cómo! Por lo menos se puede descargar Tasker y programarlo para iniciar / detener el GPS.

Otros consejos

Creo que una problema que tiene puede ser el hecho de que no hay "mapas" integradas en Android. Los mapas se cargan desde los servidores de Google sobre la marcha como un teléfono que necesita. Por ejemplo, ¿por qué cargar un mapa de todo el país cuando sólo se necesita un mapa de un barrio? Esa es la teoría detrás de él. Se agarra a su ubicación, la envía al servidor de Google, y platos que una copia del mapa que supone que usted necesita. Por supuesto, si ha descargado todos los mapas (que me oído es posible, pero no estoy totalmente seguro) en su dispositivo, entonces esto probablemente no es el caso ...

EDIT: Google hace no permitir la descarga de sus mapas. (Gracias a Austyn para más información).

Esto puede ser anticuada, pero ¿tiene alguna idea de lo que es el error?

Estoy recibiendo el error como "error al obtener información de ubicación de la celda".

He encontrado el código fuente que conducen a este error.

private void requestRefLocation(int flags)
{
    TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
    {
        GsmCellLocation gsm_cell = (GsmCellLocation) phone.getCellLocation();
        if ((gsm_cell != null)
                && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
                && (phone.getNetworkOperator() != null)
                && (phone.getNetworkOperator().length() > 3))
        {
            int type;
            int mcc = Integer.parseInt(phone.getNetworkOperator().substring(0, 3));
            int mnc = Integer.parseInt(phone.getNetworkOperator().substring(3));
            int networkType = phone.getNetworkType();
            if (networkType == TelephonyManager.NETWORK_TYPE_UMTS
                    || networkType == TelephonyManager.NETWORK_TYPE_HSDPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSUPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSPA)
            {
                type = AGPS_REF_LOCATION_TYPE_UMTS_CELLID;
            }
            else
            {
                type = AGPS_REF_LOCATION_TYPE_GSM_CELLID;
            }
            native_agps_set_ref_location_cellid(type, mcc, mnc, gsm_cell.getLac(), gsm_cell.getCid());
        }
        else
        {
            Log.e(TAG, "Error getting cell location info.");
        }
    } else {
        Log.e(TAG, "CDMA not supported.");
    }
}

Aviso de la declaración de verificación

if ((gsm_cell != null)
            && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
            && (phone.getNetworkOperator() != null)
            && (phone.getNetworkOperator().length() > 3))
    {

De alguna manera nos lleva al problema que está enfrentando. Por supuesto, mediante la conexión a una red Wi-Fi, seguirá recibiendo su ubicación, ya que está utilizando de una manera diferente para conseguirlo. Espero que esta respuesta a su pregunta.

Esta es mi actividad principal con un botón y he puesto un onClickListner en él para cambiar mi GPS desde el estado OFF a ON y no hay necesidad de ningún permiso para hacer esto.
Probado con Android 2.2 y funciona bien para mí.

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class GPSONOFFActivity extends Activity {
/** Called when the activity is first created. */
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    b=(Button)findViewById(R.id.button1);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            toggleGPS(true);                
        }
    });
}

private void toggleGPS(boolean enable) {
    String provider = Settings.Secure.getString(getContentResolver(), 
        Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(provider.contains("gps") == enable) {
        return; // the GPS is already in the requested state
    }

    final Intent poke = new Intent();
    poke.setClassName("com.android.settings", 
        "com.android.settings.widget.SettingsAppWidgetProvider");
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
    poke.setData(Uri.parse("3"));
    this.sendBroadcast(poke);
 }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top