2010-12-07 20 views
4

J'essaie d'aller chercher la latitude et la longitude Gps, mais j'ai une requête que chaque fois que j'essaie d'aller chercher Lat & Longue sans carte SIM, ce n'est pas fournissant toute information où dès que j'insère ma carte SIM, il me fournit toutes les informations de la manière désirée.Obtenir la latitude et la longitude sans insérer la carte SIM et démarrer/arrêter Gps de l'application

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

LocationListener mlocListener = new MyLocationListener(); 

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

vous pouvez voir si je suis en utilisant GPS_PROVIDER, il ne me donne pas Lat & longtemps sans l'aide de l'opérateur réseau, quelqu'un peut-il tel moi?


Une autre chose est de savoir comment démarrer et arrêter GPS à partir d'une application signifie que je veux commencer gps après moment donné et que, dès que je reçois beslocation, je peux le désactiver.

+0

Avez-vous activé la préférence "Utiliser les satellites GPS" dans les préférences système "Emplacement et sécurité"? –

+0

Salut Reuben, bien sûr que je l'ai activé, voir le problème auquel je suis confronté est bien que j'essaie de récupérer via GPS_PROVIDER, il nécessite l'aide de l'opérateur réseau, ce qui est étrange. – Ankit

Répondre

7

Vous n'avez pas besoin d'avoir accès à un réseau pour obtenir un emplacement GPS sur Android. Mais une connexion Internet accélère la correction d'emplacement d'environ 5 minutes à 5 secondes (environ)! Cette amélioration est apportée par Assisted-GPS (A-GPS), par opposition au GPS autonome.

Les téléphones GPS (y compris les appareils Android) vérifient si une connexion réseau est disponible. Si oui, ils téléchargent les données d'assistance à partir du serveur A-GPS et l'utilisent pour calculer le correctif d'emplacement avec le chipset GPS. Sinon, le chipset GPS doit télécharger les données d'un satellite GPS, ce qui prend beaucoup de temps (le taux est 50 bits par seconde!). Le processus peut également être accéléré si un emplacement GPS a été calculé il n'y a pas si longtemps.

Alors d'abord:

  • vérifier que vous avez ajouté ACCESS_FINE_LOCATION à vos autorisations de manifeste
  • vérifier que des satellites GPS sont activés dans les paramètres du téléphone
  • vérifier que vous n'êtes pas à l'intérieur (signaux de satellites 20.000 km ci-dessus ne

pas comme les toits et les murs), puis commencez votre application et attendez, il peut y avoir quelques minutes avant le premier correctif est disponible.

Comme pour démarrer le GPS depuis votre application, il semble possible (voir How can I enable or disable the GPS programmatically on Android?), mais je ne sais pas comment! Au moins, vous pouvez télécharger Tasker et le programmer pour démarrer/arrêter le GPS.

+0

merci stephen .. effectivement le téléphone n'a pas attraper les signaux à l'intérieur de mon bureau .. et j'étais vraiment nouveau à android donc ne pouvait pas obtenir cela .. et chaque fois que j'insérais ma carte SIM dans l'appareil, il allait chercher comme je l'ai mentionné LocationManager .GPS_PROVIDER et LocationManager.NETWORK_PROVIDER .. – Ankit

0

Je pense qu'un problème que vous rencontrez est le fait qu'il n'y a pas de "cartes" intégrées dans Android. Les cartes sont chargées à partir des serveurs de Google à la volée comme un téléphone a besoin d'eux. Par exemple, pourquoi charger une carte du pays entier quand vous avez seulement besoin d'une carte d'un quartier? C'est la théorie derrière cela. Il saisit votre position, l'envoie au serveur de Google et vous remet en place la carte dont vous avez besoin. Bien sûr, si vous avez téléchargé toutes les cartes (que je entendu est possible, mais je ne suis pas totalement sûr) sur votre appareil, alors ce ne serait probablement pas le cas ...

EDIT: Google ne pas permettent de télécharger leurs cartes. (Merci à Austyn pour info).

+0

Google interdit la mise en cache complète de ses tuiles de carte. Pour ce faire, vous devrez télécharger une application de cartographie alternative (http://wiki.openstreetmap.org/wiki/Android) qui permet le stockage local des mosaïques de cartes. –

+0

OK, ça efface ça alors. Je vous remercie. – Brandon

0

Ceci peut être obsolète, mais avez-vous une idée de ce qu'est l'erreur? Je reçois l'erreur en tant que "erreur d'obtention d'informations sur l'emplacement de la cellule".

J'ai trouvé le code source qui a provoqué cette erreur.

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."); 
    } 
} 

Notez la déclaration de vérification

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

Il conduit en quelque sorte au problème que vous êtes confronté. Bien sûr, en vous connectant à un réseau WIFI, vous obtiendrez toujours votre position car elle utilise une manière différente de l'obtenir. J'espère que cela répond à votre question.

0

Voici mon activité principale avec un bouton et j'ai mis un onClickListner sur lui pour basculer mon GPS de l'état OFF à ON et il n'y a pas besoin de toute permission pour le faire.
Testé avec Android 2.2 et fonctionne bien pour moi.

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); 
} 
} 
+0

J'ai essayé mais pas fonctionné pour moi dans mon appareil qui a OS 4.0.3. Y at-il une permission que je dois mentionner dans le manifeste, car il ne montre aucune erreur, donc je suppose que rien ne se passe. – Ankit