Kelas Android LocationClient sudah usang tetapi digunakan dalam dokumentasi

149

Jika kita melihat dokumentasi dari LocationClient, kita dapat melihat bahwa kelas sudah usang.

Tetapi kelas yang ditinggalkan digunakan dalam dokumentasi untuk mendapatkan lokasi saat ini .

Saya pikir ini sedikit menyesatkan atau saya melihat dokumentasi yang salah?

George Mathew K
sumber
6
Seperti biasa, mereka mencabut apis tetapi mereka tidak memperbarui dokumen pada saat yang sama. Anda harus menunggu hingga dokumen diperbarui atau mencoba menemukan contoh yang berfungsi
Imanol
1
@ GeorgeMathewK bisakah Anda menandai jawaban yang benar;)
Diego Palomar

Jawaban:

271

Sekali lagi Google telah merilis API baru tetapi mereka belum memperbarui dokumentasinya: $ Setelah menghabiskan waktu mencoba untuk mencari tahu cara kerjanya saya mendapatkannya, di sini Anda memiliki contoh lengkap menggunakan API Layanan Lokasi baru / terbaru ... Nikmati mengembangkan :)

import android.location.Location;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

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

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

    private final String TAG = "MyAwesomeApp";

    private TextView mLocationView;

    private GoogleApiClient mGoogleApiClient;

    private LocationRequest mLocationRequest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mLocationView = new TextView(this);

        setContentView(mLocationView);

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

    @Override
    protected void onStart() {
        super.onStart();
        // Connect the client.
        mGoogleApiClient.connect();
    }

    @Override
    protected void onStop() {
        // Disconnecting the client invalidates it.
        mGoogleApiClient.disconnect();
        super.onStop();
    }

    @Override
    public void onConnected(Bundle bundle) {

        mLocationRequest = LocationRequest.create();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(1000); // Update location every second

        LocationServices.FusedLocationApi.requestLocationUpdates(
                mGoogleApiClient, mLocationRequest, this);
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.i(TAG, "GoogleApiClient connection has been suspend");
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.i(TAG, "GoogleApiClient connection has failed");
    }

    @Override
    public void onLocationChanged(Location location) {
        mLocationView.setText("Location received: " + location.toString());
    }
}

dan jangan lupa untuk menambahkan izin ini ke file AndroidManifest.xml Anda:

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

Catatan: jika Anda hanya perlu mendapatkan lokasi terakhir (tanpa pembaruan), Anda dapat menggunakan LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient)dari OnConnected

Diego Palomar
sumber
3
Apakah ada contoh kode serupa tentang cara menggunakan LocationServices.GeofencingAPI?
PenyelidikanJax
1
Jawaban yang bagus. Gabungkan saja dengan beberapa komponen / barang lama dan semuanya berfungsi seperti pesona.
MiguelHincapieC
2
Perhatikan bahwa jika Anda hanya ingin mendapatkan lokasi terakhir tanpa pembaruan, Anda dapat menggunakan LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);dari OnConnected
Stevie Kideckel
1
Bagaimana cara Anda menghentikan permintaan lokasi yang sedang berlangsung?
Ersen Osman
5
FusedLocationApi sudah tidak digunakan lagi
22

Beberapa dokumentasi sudah lama di Google (beberapa contoh yang Anda sebutkan masih menggunakan yang sudah usang LocationClient). Anda harus menggunakan GoogleApiClient baru seperti yang dijelaskan dalam contoh Layanan lokasi:

private GoogleApiClient mGoogleApiClient;

  mGoogleApiClient = new GoogleApiClient.Builder(context)
     .addApi(LocationServices.API)
     .addConnectionCallbacks(this)
     .addOnConnectionFailedListener(this)
     .build()

dan ketika klien baru terhubung, Anda dapat menggunakan api lokasi yang menyatu misalnya seperti ini:

LocationServices.FusedLocationApi.requestLocationUpdates(theNewClient, 
    locationRequest, locationListener);
paularius
sumber
dapatkah Anda memberi tahu saya cara mendapatkan garis lintang dan bujur.?
2
FusedLocationApi sudah tidak digunakan lagi
Furqan
4

Sepertinya ini tercakup dalam blog pengembang . Untuk LocationClient, Anda akan menggunakan ini bersama dengan LocationServices yang kemudian membawa kami ke GeofencingApi .

Sofi Software LLC
sumber
6
Enam bulan kemudian setelah rilis Google Play API baru itu dan dokumentasinya belum diperbarui.
AxeEffect
1
Tampaknya juga aplikasi LocationProvider resmi dari Google masih menggunakan LocationClient yang tidak lagi ada di dalam paket ini. Com.google.android.gms.location.LocationClient;
Simon
3

LocationClient dihapus. GoogleApiClient adalah api untuk digunakan untuk API Lokasi layanan Google Play.

Kode sampel untuk skenario umum ada di sini dan kelas pelatihan diperbarui dengan lebih banyak lagi akan segera hadir.

PaulR
sumber
0

Menurut kode pembaruan dokumentasi ..

package iwannado.com.myapplicationforsha1key;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Geocoder;
import android.location.Location;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.identity.intents.Address;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

import java.io.IOException;
import java.util.List;

public class MapWithMapViewActivity extends AppCompatActivity implements OnMapReadyCallback,
        GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
    private static final String TAG = MapWithMapViewActivity.class.getCanonicalName();


    private GoogleMap mMap = null;
    private MapView mMapView = null;

    private EditText loatcationEditText = null;

    private GoogleApiClient mGoogleApiClient = null;
    private Location mLocationRequest = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map_with_map_view);
        loatcationEditText = (EditText) findViewById(R.id.loatcation_edit_text);
        mMapView = (MapView) findViewById(R.id.mapView);
        /*
        * The method is used to create mapView
        * */
        mMapView.onCreate(savedInstanceState);
        /*
        *The method Return Google map
        * */
        mMapView.getMapAsync(this);

        gotoCurrentLoactionGooglePlayService();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }


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

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }

    @Override
    protected void onStart() {
        super.onStart();
        mGoogleApiClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mGoogleApiClient.disconnect();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mMapView.onSaveInstanceState(outState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;



    }



    private void gotoCurrentLoactionGooglePlayService() {
        /*working with new google api for laction..
http://stackoverflow.com/a/25173057
* */
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }



    @Override
    public void onConnected(@Nullable Bundle bundle) {
/*
* Follow this documentation.. https://developer.android.com/training/location/retrieve-current.html
*
* Please add Runtime permission here for android 6
* */
        mLocationRequest = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLocationRequest != null) {

           LatLng latLng = new LatLng(mLocationRequest.getLatitude(),mLocationRequest.getLongitude());
        mMap.addMarker(new MarkerOptions().position(latLng).title("Programmatically Current Loaction"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            Toast.makeText(this,"getLatitude() = "+String.valueOf(mLocationRequest.getLatitude())+"\n getLongitude() = "+String.valueOf(mLocationRequest.getLongitude()),Toast.LENGTH_LONG).show();

        }
    }


    @Override
    public void onConnectionSuspended(int i) {
        Log.i(TAG, "GoogleApiClient connection has been suspend");
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        Log.i(TAG, "GoogleApiClient connection has failed");
    }

    @Override
    public void onLocationChanged(Location location) {


        Toast.makeText(this,"Location received: " + location.toString(),Toast.LENGTH_LONG).show();

    }
}
Muhammad Waleed
sumber
0

Anda cukup menambahkan ini dalam kode Anda,

private FusedLocationProviderClient mFusedLocationClient;
private Location mLastLocation;

 oncreate(){
  .
  .
  FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
   if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    mFusedLocationClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {
            mLastLocation =location;
            if (mLastLocation!= null) {
                LogUtils.logE(TAG, "Lat: " + mLastLocation.getLatitude() + "Long: " + mLastLocation.getLongitude());
            }

        }
    });
  .
  .
  }

Menurut kode pembaruan dokumentasi ..

Saurabh Gaddelpalliwar
sumber