2010-12-09 59 views
0

Comment obtenir l'emplacement actuel en utilisant l'adresse IP?Android: Comment situer l'application?

+0

Vous devez marquer cette question avec Android, de cette façon, les gens qui cherchent seulement pour répondre à des questions Android trouveront plus facilement. –

Répondre

1

Sujet Obtaining user location au couvre l'obtention de l'emplacement en utilisant les fonctions intégrées dans Android.

Il indique également ceci:

Le fournisseur d'emplacement réseau fournit de bonnes données de localisation sans utiliser GPS.

Et:

Restrict un ensemble de fournisseurs

En fonction de l'environnement dans lequel votre application est utilisée ou le niveau de précision souhaité, vous pouvez choisir d'utiliser uniquement le fournisseur d'emplacement réseau ou seulement le GPS, au lieu des deux. Interagir avec un seul des services réduit l'utilisation de la batterie à un coût potentiel de précision.

0

Pourquoi voulez-vous utiliser l'adresse IP pour trouver l'emplacement? Adresse IP peut donner des informations de localisation avec les détails du pays seulement et aussi vous dépendez d'un service Web qui fait l'emplacement géographique avec IP qui est moins fiable et ne fonctionnera que si vous avez un accès Internet. Aussi, si vous vous connectez à un serveur dans votre application, vous pouvez simplement laisser le serveur faire cela, ce qui sera beaucoup plus rapide.

Vous avez le GPS sur l'appareil qui vous donnera l'emplacement de l'utilisateur en temps réel en termes de latitude et de longitude. Vous pouvez suivre le lien dans la réponse de Joakim

0

Si vous voulez obtenir l'emplacement mobile, vous devez d'abord un fournisseur dans mon cas, j'utilise google API pour obtenir l'emplacement GPS de votre téléphone mobile, vous devez obtenir le jeton de l'API dans le tutoriel suivant explique vraiment bien comment obtenir l'emplacement de votre téléphone mobile.

http://blog.teamtreehouse.com/beginners-guide-location-android 

Et du web développeur android si vous avez des doutes bien.

http://developer.android.com/training/location/retrieve-current.html 
http://developer.android.com/training/location/receive-location-updates.html 

Et c'est le plus important pour moi dans le développer je suis arrivé à obtenir l'emplacement d'un fragment et j'utilise le fragment pour obtenir l'emplacement de l'activité partout dont le besoin de l'emplacement dans mon application Android ..

Utilisation des rappels pour demander l'emplacement du téléphone mobile.

Important vous besoin d'une autorisation de l'emplacement et d'autres pour travailler ...

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<!-- The following two permissions are not required to use 
    Google Maps Android API v2, but are recommended. --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

<uses-feature android:glEsVersion="0x00020000" android:required="true"/> 

XML de l'activité doit avoir le fragment:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<fragment android:name="es.urjc.mov.javsan.fichas.LocationFragment" 
    android:id="@+id/location_fragment" 
    android:layout_height="0dip" 
    android:layout_weight="0" 
    android:layout_width="match_parent" /> 

</LinearLayout> 

Fragment de code:

package es.urjc.mov.javsan.fichas; 

import android.Manifest; 
import android.app.Fragment; 
import android.content.IntentSender; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.gms.appindexing.AppIndex; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 

public class LocationFragment extends Fragment implements 
     com.google.android.gms.location.LocationListener, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

private static final String TAG = LocationFragment.class.getSimpleName(); 

private GoogleApiClient mGoogleApiClient; 
private LocationRequest mLocationRequest; 
private android.location.Location currentLocation; 

private View fragmentLayout; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    fragmentLayout = inflater.inflate(R.layout.location_fragment, container, false); 

    buildLocation(); 
    return fragmentLayout; 
} 


@Override 
public void onStart() { 
    if (!mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.connect(); 
    } 
    super.onStart(); 
} 

@Override 
public void onResume() { 
    if (!mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.connect(); 
    } 
    super.onResume(); 
} 

@Override 
public void onStop() { 
    if (mGoogleApiClient.isConnected()) { 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
     mGoogleApiClient.disconnect(); 
    } 
    super.onStop(); 
} 


@Override 
public void onConnected(Bundle bundle) { 
    if (isDenyLocation()) { 
     requestAllowLocation(); 
     return; 
    } 

    android.location.Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
    if (location != null) { 
     handleNewLocation(location); 
    } else { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
    } 
} 

@Override 
public void onConnectionSuspended(int i) { 
    Log.e(TAG, String.format("%s\n", "Connection suspended please reconnect...")); 
} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    Log.v(TAG, String.format("Connection failed : %s", connectionResult.toString())); 

    if (!connectionResult.hasResolution()) { 
     Log.i(TAG, "Location services connection failed with code " + connectionResult.getErrorCode()); 
     return; 
    } 

    try { 
     // Start an Activity that tries to resolve the error 
     connectionResult.startResolutionForResult(getActivity(), CONNECTION_FAILURE_RESOLUTION_REQUEST); 
    } catch (IntentSender.SendIntentException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public void onLocationChanged(Location location) { 
    handleNewLocation(location); 
} 

private void buildLocation() { 

    if (mGoogleApiClient == null) { 
     // Create the GoogleApiClient Object. 
     mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .addApi(AppIndex.API).build(); 
    } 

    if (mLocationRequest == null) { 
     // Create the LocationRequest Object. 
     mLocationRequest = LocationRequest.create() 
       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
       .setInterval(10 * 1000)  // 10 seconds, in milliseconds 
       .setFastestInterval(1 * 1000); // 1 second, in milliseconds 
    } 

} 

private void handleNewLocation(Location location) { 
    currentLocation = location; 
    Log.e(TAG, String.format("Current Location : %f, %f", 
      currentLocation.getLongitude(), currentLocation.getLatitude())); 
} 

I J'espère que cette aide!

Javi,