অ্যান্ড্রয়েড লোকেশনক্লিয়েন্ট শ্রেণি অবনতিহীন তবে ডকুমেন্টেশনে ব্যবহৃত হয়


149

আমরা যদি ডকুমেন্টেশনের মধ্য দিয়ে যাই তবে আমরা LocationClientদেখতে পাচ্ছি যে ক্লাসটি হ্রাস পেয়েছে ।

তবে অবহিত শ্রেণি বর্তমান অবস্থান পেতে ডকুমেন্টেশনে ব্যবহৃত হয় ।

আমি মনে করি এটি কিছুটা বিভ্রান্তিকর বা আমি কী ভুল দস্তাবেজগুলি খুঁজছি?


6
সর্বদা হিসাবে, তারা এপিসকে অবমূল্যায়ন করে তবে তারা একই সময়ে ডক্স আপডেট করে না। দস্তাবেজগুলি আপডেট না হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হবে বা একটি কাজের উদাহরণ সন্ধান করার চেষ্টা করতে হবে
Imanol

1
@ জর্জিম্যাথউইকে আপনি দয়া করে সঠিক উত্তরটি চিহ্নিত করতে পারেন;)
ডিয়েগো পালোমার

উত্তর:


271

আবার গুগল একটি নতুন এপিআই প্রকাশ করেছে তবে তারা ডকুমেন্টেশন আপডেট করেছে না: it এটি কীভাবে কাজ করে তা বের করার চেষ্টা করার পরে কিছু সময় ব্যয় করার পরে, নতুন / সর্বশেষ অবস্থান পরিষেবা এপিআই ব্যবহার করে আপনার এখানে একটি পুরো উদাহরণ রয়েছে ... উপভোগ করুন বিকাশ :)

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());
    }
}

এবং আপনার AndroidManLive.xML ফাইলে এই অনুমতিগুলি যুক্ত করতে ভুলবেন না:

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

দ্রষ্টব্য: যদি আপনার কেবলমাত্র সর্বশেষ অবস্থানটি (আপডেট ব্যতীত) পাওয়ার দরকার হয় তবে আপনি LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient)অন ​​সংযুক্ত থেকে ব্যবহার করতে পারেন


3
কীভাবে লোকেশন সার্ভিসগুলি ব্যবহার করতে হয় সে সম্পর্কে একটি অনুরূপ কোড উদাহরণ রয়েছে? জিওফেনসিংএপিআই?
ইনকুইসিটারজ্যাক্স

1
ভাল উত্তর. এটি কেবল কিছু পুরানো উপাদান / স্টাফের সাথে একীভূত করুন এবং সমস্ত কিছুই কবজির মতো কাজ করে।
মিগুয়েলহিনাপিসি

2
মনে রাখবেন যে আপনি যদি আপডেট ছাড়াই কেবল শেষ স্থানটি পেতে চান তবে আপনি LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);অন ​​কানেক্টেড
স্টিভি কিডেকেল

1
আপনি কীভাবে চলমান অবস্থানের অনুরোধটি বন্ধ করবেন?
এরসেন ওসমান

5
FusedLocationApi অবচয় করা হয়েছে

22

কিছু ডকুমেন্টেশন গুগলে পুরানো (কিছু উদাহরণ যা আপনি উল্লেখ করেছেন এখনও অবনমিত ব্যবহার করেছেন LocationClient)। অবস্থানের পরিষেবার উদাহরণগুলিতে বর্ণিত হিসাবে আপনাকে নতুন GoogleApiClient ব্যবহার করতে হবে:

private GoogleApiClient mGoogleApiClient;

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

এবং যখন নতুন ক্লায়েন্ট সংযুক্ত থাকে, আপনি উদাহরণস্বরূপ ফিউজড লোকেশন এপিআই ব্যবহার করতে পারেন:

LocationServices.FusedLocationApi.requestLocationUpdates(theNewClient, 
    locationRequest, locationListener);

অক্ষাংশ এবং দ্রাঘিমাংশ পেতে কিভাবে আমাকে বলতে পারেন?

2
FusedLocationApi অবহিত করা হয়েছে
Furqan

4

দেখে মনে হচ্ছে এটি বিকাশকারী ব্লগে wasাকা ছিল । লোকেশনক্লিয়েন্টের জন্য, আপনি এটি অবস্থানের সার্ভিসগুলির সাথে একত্রে ব্যবহার করবেন যা আমাদের আমাদের জিওফেন্সিংএপি'র দিকে নিয়ে যায় ।


6
সেই নতুন গুগল প্লে এপিআই প্রকাশের ছয় মাস পরে এবং ডকুমেন্টেশনটি এখনও আপডেট হয়নি।
এক্সেএফেক্ট

1
দেখে মনে হচ্ছে গুগলের সরকারী লোকেশনপ্রোভাইডার অ্যাপ্লিকেশনটি এখনও পজিশনটি ব্যবহার করছে না যা এই প্যাকেজটির মধ্যে আমদানি করে com.google.android.gms.location.LocationClient;
সাইমন

3

অবস্থানক্লিয়েন্ট সরানো হয়েছে। গুগল প্লে সার্ভিস লোকেশন এপিআইয়ের জন্য গুগলএপিআইক্লিয়েন্টটি এপিআই।

সাধারণ পরিস্থিতিগুলির জন্য নমুনা কোডটি এখানে এবং প্রশিক্ষণ ক্লাসগুলি আরও শীঘ্রই আসার সাথে আপডেট করা হয়েছিল


0

মতে ডকুমেন্টেশন আপডেট কোড ..

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();

    }
}

0

আপনি কেবল আপনার কোডে এটি যুক্ত করুন,

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());
            }

        }
    });
  .
  .
  }

মতে ডকুমেন্টেশন আপডেট কোড ..

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.