0

Есть ли способ получить информацию без отображения карты? Я хочу получить координаты своего места во время работы с другой деятельностью. tnx много.получить широту и долготу в Android без отображения карты

+0

да, вы не должны использовать карту, чтобы получить долготу и широту – JRowan

+0

же вопрос здесь с anwser http://stackoverflow.com/questions/2227292/how-to-get -latitude-and-long-of-the-mobiledevice-in-android –

+0

Ссылка, упомянутая выше, дает лучший ответ. Просто добавьте его, исходя из вашего требования. вам нужно выбрать, сколько минут раз, вам нужна информация о местоположении. Причина в том, что прослушиватели больше заряжают аккумулятор. Итак, выберите сценарий соответствующим образом. – Prem

ответ

3

использовать следующий код. Он работает на меня.

import android.app.AlertDialog; 
import android.app.Service; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.provider.Settings; 

public class GPSTracker extends Service implements LocationListener{ 

    private Context context; 
    boolean isGPSEnabled = false; 
    boolean isNetworkEnabled = false; 
    boolean canGetLocation = false; 

    Location location; 
    double latitude,longitude; 

    LocationManager locationManager; 
    AlertDialogManager am = new AlertDialogManager(); 
    public GPSTracker(Context context){ 
     this.context = context; 
     getLocation(); 
    } 
    private Location getLocation() { 
     // TODO Auto-generated method stub 
     try{ 
      locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 

      isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

      isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 


      if (!isGPSEnabled && !isNetworkEnabled){ 

      } else { 
       this.canGetLocation = true; 

       if (isNetworkEnabled){ 

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 3, this); 

        if (locationManager != null){ 
         location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
         if (location != null){ 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 

       if (isGPSEnabled){ 
        if (location == null){ 
         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 3, this); 
         if (locationManager != null){ 
          location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
          if (location != null){ 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
       } else { 
        showAlertDialog(); 
       } 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return location; 
    } 
    public void showSettingsAlert(){ 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(GPSTracker.this); 

     // Setting Dialog Title 
     alertDialog.setTitle("GPS is settings"); 

     // Setting Dialog Message 
     alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

     // Setting Icon to Dialog 
     //alertDialog.setIcon(R.drawable.delete); 

     // On pressing Settings button 
     alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog,int which) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(intent); 
       dialog.cancel(); 
      } 
     }); 

     // on pressing cancel button 
     alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 

     // Showing Alert Message 
     alertDialog.show(); 
    } 

    public void showAlertDialog(){ 
     am.showAlertDialog(GPSTracker.this, "GPS Setting", "Gps is not enabled. Do you want to enabled it ?", false); 
    } 
    public double getLatitude(){ 
     if (location != null){ 
      latitude = location.getLatitude(); 
     } 

     return latitude; 
    } 

    public double getLongitude(){ 
     if (location != null){ 
      longitude = location.getLongitude(); 
     } 

     return longitude; 
    } 

    public boolean canGetLocation(){ 
     return this.canGetLocation; 
    } 
    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 
     if (location != null){ 
      this.location = location; 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

И в функции MainActivity вызова, как показано ниже.

GPSTracker gps = new GPSTracker (this); 
double latitude = gps.getLatitude(); 
double longitude= gps.getLongitude(); 
+0

tnx dude. это работа для меня тоже –

+0

его мое удовольствие! –

+0

Зачем расширять сервис? – portfoliobuilder

0

С помощью LocationManager вы можете получить широчайшие и Ланг:

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
double longitude = location.getLongitude(); 
double latitude = location.getLatitude(); 

Вызов getLastKnownLocation() не блок - это значит, что будет возвращать null, если нет позиции в настоящее время доступна - так что вы, вероятно, хотите иметь посмотрите на передачу LocationListener на requestLocationUpdates() method вместо этого, что даст вам асинхронные обновления вашего местоположения.

private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     longitude = location.getLongitude(); 
     latitude = location.getLatitude(); 
    } 
} 

lm.requestLocationUpdates(LocationManager.GPS, 2000, 10, locationListener); 

Вы должны дать ваше заявление ACCESS_FINE_LOCATION permission если вы хотите использовать GPS.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Вы также можете добавить ACCESS_COARSE_LOCATION permission для того, когда GPS не доступен, и выберите поставщика местоположения с getBestProvider() method.

0

Используя этот код, способного получить значение широты и долготы и сделать , что перед использованием приложения вы получили разрешение от манифеста для доступа места

if(isGPS) { 
    Geocoder gc = new Geocoder(getApplicationContext(), Locale.getDefault()); 
     try 
       { 
       double lat=location.getLatitude(); 
      double lng=location.getLongitude(); 
         Toast.makeText(getApplicationContext(),lat+"and"+lng, Toast.LENGTH_LONG).show(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
     } 
       else 
       { 
      display("GPS not Enabled"); 
     } 
Manifest permission 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
Смежные вопросы