2016-06-21 2 views
2

В настоящее время я создаю приложение, где мне нужно получить местоположение пользователя, когда нажимается кнопка. Я использую образец this, и он отлично работает как пример приложения. Мой вопрос заключается в том, как я могу реализовать его в моей кнопке приложения onClick? Мне не нужно его часто обновлять, я просто нуждаюсь в нем, чтобы, когда пользователь нажимает кнопку, он получает широту и долготу пользователя и сохраняет их в двух переменных. Какой был бы лучший способ сделать это? Я не опубликовал свой собственный код, потому что у меня есть кнопка с событием onClick.Как я могу получить местоположение Android сразу одним нажатием кнопки?

ответ

0

Выполните следующие шаги, чтобы получить место на кнопку мыши:

Implement LocationListener в своей деятельности, как:

public class MainActivity Extends AppCompactActivity implements LocationListener 

Затем создайте экземпляр для LocationManager, longitude и latitude, как показано ниже:

 LocationManager locationManager; // create global outside all methods 
    Double currentLattitude, currentLongitude; 

Установите событие click на вашей кнопке, как показано ниже:

 btnLocation.setOnClickListner(new View.onClickListner 
     { 
      @Override 
      public void onClick(View v) 
      { 
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
      } 
     }); 

Теперь реализовать метод LocationListener, как показано ниже:

 @Override 
     public void onLocationChanged(Location location) { 

      currentLattitude = location.getLatitude(); 
      currentLongitude = location.getLongitude()); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Log.d("Latitude","disable"); 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
       Log.d("Latitude","enable"); 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
       Log.d("Latitude","status"); 
     } 

При этом, вы можете получить ваше местоположение с помощью на щелчком кнопки.

Главное, чтобы не забудьте это установить разрешение (в манифесте), как показано ниже:

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

Использование слиты расположение API это самый быстрый из всех остальных.

public class LocationActivity extends Activity implements 
     LocationListener, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    private static final String TAG = "LocationActivity"; 
    private static final long INTERVAL = 1000 * 10; 
    private static final long FASTEST_INTERVAL = 1000 * 5; 
    Button btnFusedLocation; 
    TextView tvLocation; 
    LocationRequest mLocationRequest; 
    GoogleApiClient mGoogleApiClient; 
    Location mCurrentLocation; 
    String mLastUpdateTime; 

    protected void createLocationRequest() { 
     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(INTERVAL); 
     mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d(TAG, "onCreate ..............................."); 
     //show error dialog if GoolglePlayServices not available 
     if (!isGooglePlayServicesAvailable()) { 
      finish(); 
     } 
     createLocationRequest(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(LocationServices.API) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 

     setContentView(R.layout.activity_main); 
     tvLocation = (TextView) findViewById(R.id.tvLocation); 

     btnFusedLocation = (Button) findViewById(R.id.btnShowLocation); 
     btnFusedLocation.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       updateUI(); 
      } 
     }); 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Log.d(TAG, "onStart fired .............."); 
     mGoogleApiClient.connect(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Log.d(TAG, "onStop fired .............."); 
     mGoogleApiClient.disconnect(); 
     Log.d(TAG, "isConnected ...............: " + mGoogleApiClient.isConnected()); 
    } 

    private boolean isGooglePlayServicesAvailable() { 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
     if (ConnectionResult.SUCCESS == status) { 
      return true; 
     } else { 
      GooglePlayServicesUtil.getErrorDialog(status, this, 0).show(); 
      return false; 
     } 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     Log.d(TAG, "onConnected - isConnected ...............: " + mGoogleApiClient.isConnected()); 
     startLocationUpdates(); 
    } 

    protected void startLocationUpdates() { 
     PendingResult<Status> pendingResult = LocationServices.FusedLocationApi.requestLocationUpdates(
       mGoogleApiClient, mLocationRequest, this); 
     Log.d(TAG, "Location update started ..............: "); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     Log.d(TAG, "Connection failed: " + connectionResult.toString()); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Log.d(TAG, "Firing onLocationChanged.............................................."); 
     mCurrentLocation = location; 
     mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); 
     updateUI(); 
    } 

    private void updateUI() { 
     Log.d(TAG, "UI update initiated ............."); 
     if (null != mCurrentLocation) { 
      String lat = String.valueOf(mCurrentLocation.getLatitude()); 
      String lng = String.valueOf(mCurrentLocation.getLongitude()); 
      tvLocation.setText("At Time: " + mLastUpdateTime + "\n" + 
        "Latitude: " + lat + "\n" + 
        "Longitude: " + lng + "\n" + 
        "Accuracy: " + mCurrentLocation.getAccuracy() + "\n" + 
        "Provider: " + mCurrentLocation.getProvider()); 
     } else { 
      Log.d(TAG, "location is null ..............."); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     stopLocationUpdates(); 
    } 

    protected void stopLocationUpdates() { 
     LocationServices.FusedLocationApi.removeLocationUpdates(
       mGoogleApiClient, this); 
     Log.d(TAG, "Location update stopped ......................."); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     if (mGoogleApiClient.isConnected()) { 
      startLocationUpdates(); 
      Log.d(TAG, "Location update resumed ....................."); 
     } 
    } 
} 
  • LocationListener обеспечивает обратный вызов для изменения местоположения через onLocationChanged.

  • GoogleApiClient.ConnectionCallbacks обеспечивает обратный вызов для GoogleApiClient onConnected.

  • GoogleApiClient.OnConnectionFailedListener обеспечивает обратный вызов для GoogleApiClient onConnectionFailed.

Источник:http://javapapers.com/android/android-location-fused-provider/

+0

Как бы я назвать это от моего MainActivity получить местоположение, когда моя кнопка нажата? –

+0

Проверьте связь внимательно, вы узнаете, как ее использовать. Также он вызывается нажатием кнопки на нем. Просто реализуйте эти методы в своем mainActivity 'public class MainActivity extends Activity реализует LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener' – Abhishek

+0

Будет ли это лучший способ сделать это, если я планирую использовать это при нескольких действиях? –

Смежные вопросы