getLastK ज्ञিতলোকেশন শূন্য ফেরত


85

আমি এই সম্পর্কে কিছু প্রশ্ন পড়েছি, কিন্তু আমার প্রয়োজনীয় উত্তরটি আমি খুব একটা পাইনি।

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

getLastKnownLocation(provider, false);

যদিও আমাকে শূন্য করে তোলে তাই আমার এখানে সাহায্যের প্রয়োজন। আমি COARSE + ফাইন অবস্থানের জন্য অনুমতি যুক্ত করেছি। তবে আমি সাধারণত আমার ফোনের জন্য সমস্ত ধরণের নেটওয়ার্ক ডেটা অক্ষম করে থাকি, কারণ আমি আমার ফোনের বিলে অনাকাঙ্ক্ষিত ডেটাফ্লো ব্যয় সম্পর্কে খুব খুশি নই। সুতরাং আমি এই পরীক্ষার জন্য কেবলমাত্র ওয়াইফাই সক্ষম এবং সংযুক্ত করেছি।

এটি সম্ভব হওয়ার জন্য আমাকে আরও সক্ষম করার দরকার আছে কি? আমি কি মনে করব ওয়াইফাই যথেষ্ট হবে?


আপনি getLastLocation জন্য নতুন API এবং পুরানো মিশ এই অনুসরণ stackoverflow.com/a/48033659/4997704
Binesh কুমার

এই উত্তরটি পড়ার মতো: stackoverflow.com/a/38794291/5319831
মোহাম্মদ নাভেদ

উত্তর:


194

শেষ পরিচিত অবস্থানটি পেতে এই পদ্ধতিটি ব্যবহার করুন:

LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();

private Location getLastKnownLocation() {
    mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
    List<String> providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
        Location l = mLocationManager.getLastKnownLocation(provider);
        if (l == null) {
            continue;
        }
        if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
            // Found best last known location: %s", l);
            bestLocation = l;
        }
    }
    return bestLocation;
}

4
দেখা যাচ্ছে যে আমার এটি ঠিক আছে, আমি কেবল একটি ত্রুটি লক্ষ্য করেছি যা এর সমাধান পেয়েছি। জিপিএসের জন্য গুগল পজিশনের অনুমতি দেওয়ার জন্য আমার ফোন সেট নেই। তাই হ্যা. যাইহোক ধন্যবাদ =)
আলেকসান্দার ফিম্রেইট

4
দুর্দান্ত বাস্তবায়ন, খুব নমনীয়। ধন্যবাদ!
অ্যালেক্সভিপার্ল

4
একটি যাদুমন্ত্র মত কাজ করে. ধন্যবাদ!
ইরোল ইয়েনিয়ারা

4
ফোনে অবস্থান সক্ষম করুন।
থারাকা নির্মনা

18
প্রশ্নটি সম্পর্কে getLastKnownLocation returns null... এই কোডটি কোনও পরিবর্তন করবে না ... যদি সমস্ত সরবরাহকারীদের জন্য mLocationManager.getLastKnownLocation (এটি নাল ফিরে আসতে পারে) এটি এখনও শূন্য ফেরত আসবে ... উত্তর হ'ল দুঃখিত, আপনি এড়াতে পারবেন না ... যদি আপনি সত্যিই চান অবস্থানটি getLastKজ্ঞান লোকেশন ব্যবহার করবেন না
সেলভিন

32

আপনি যখন নতুন করে ও পুরানো অবস্থানের এপিআই একসাথে মিশ্রিত করছেন।

শেষ পরিচিত অবস্থান পেতে আপনার যা করতে হবে তা হল কল

compile "com.google.android.gms:play-services-location:11.0.1"
mLocationClient.getLastLocation();

একবার অবস্থান পরিষেবা সংযুক্ত ছিল।

নতুন অবস্থানের এপিআই কীভাবে ব্যবহার করবেন তা পড়ুন

http://developer.android.com/training/location/retrieve-current.html#GetLocation

 private void getLastLocationNewMethod(){
    FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    mFusedLocationClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    // GPS location can be null if GPS is switched off
                    if (location != null) {
                        getAddress(location);
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.d("MapDemoActivity", "Error trying to get last GPS location");
                    e.printStackTrace();
                }
            });
}

4
নতুন এপিআই রয়েছে তা দেখানোর জন্য আপনাকে ধন্যবাদ। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ভায়োলেট জিরাফ

আপনাকে এত ধন্যবাদ যে এই এপিআইটি খুব দ্রুত, ধন্যবাদ মানুষ আমি জানতাম না এটি বিদ্যমান
তাবিশ

4
অবস্থান এখানেও শূন্য ফেরত। এর কারণ কী হতে পারে?
JollyRoger

4
অবস্থানের অনুমতি চেক করুন
বিনেশ কুমার

সম্মত ... এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। ধন্যবাদ.
নিকোলা সালভারো

7

আপনি নেটওয়ার্ক সরবরাহকারী থেকে ক্যাশেড অবস্থানটি পাওয়ার চেষ্টা করছেন। বৈধ ফিক্স না পাওয়া পর্যন্ত আপনাকে কয়েক মিনিট অপেক্ষা করতে হবে। যেহেতু নেটওয়ার্ক সরবরাহকারীর ক্যাশেটি খালি রয়েছে, আপনি অবশ্যই সেখানে একটি শূন্যতা পেয়ে যাচ্ছেন ..


ঠিক আছে, তাহলে আমার ক্যাশে বাড়ানো দরকার? আমার অ্যাপ্লিকেশানটির কারণে ক্রাশ হওয়ার পরে আমি কীভাবে তা করতে পারি?
আলেকসান্দার ফিমরাইট

4
আপনি অবস্থান শ্রোতার onLocationChanged পদ্ধতি ব্যবহার করতে হবে। বৈধ ফিক্স পেতে সময় লাগে (কয়েক মিনিট)
সাগর মইয়াদ

ঠিক আছে ধন্যবাদ. আমি এটির লগটি পপিং না হওয়া পর্যন্ত আমি চারদিকে
ঘুরবো

4
এতে কিছু সঞ্চিত না থাকলেও কি আমার সাথে এটি ঘুরতে হবে?
আলেকসান্দার ফিমরাইট

1

এই কোড যুক্ত করুন

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
     return;
}

ফাংশন আগে :

locationManagerObject.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new LocationListener()) পাশাপাশি ফাংশন: locationManagerObject.getLastKnownLocation(LocationManager.GPS_PROVIDER)


1

এটি চেষ্টা করুন এটি আমার পক্ষে ভাল কাজ করে: -

LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();

        private Location getLastKnownLocation() {
            Location oldLoc;
            while (true){
                oldLoc = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                if (oldLoc == null){
                    continue;
                }
                else {
                    break;
                }
            }
            return oldLoc;
        }

আপনি দ্রুত ফলাফলের জন্য GPS_PROVIDER এর জায়গায় NETWORK_PROVIDER ব্যবহার করতে পারেন ..


0

জ্যামারিন.আন্ড্রয়েডে আমার এই সমস্যা ছিল।

Location location = locationManager.GetLastKnownLocation(provider);নাল মান ফিরে আসছিল। আমি আমার কোডটি যাচাই করেছিলাম এবং জানতে পেরেছিলাম যে আমি কেবলমাত্র ACCESS_COARSE_LOCATION এর জন্য অনুমতি চেয়েছিলাম। আমি ACCESS_FINE_LOCATION এর অনুমতিের জন্য কোড যুক্ত করেছি এবং এখন এটি শূন্য হয় না। আমার কোডটি এখানে:

void AskPermissions()
{
    if (CheckSelfPermission(Manifest.Permission.AccessCoarseLocation) != (int)Permission.Granted ||
            CheckSelfPermission(Manifest.Permission.AccessFineLocation) != (int)Permission.Granted)
        RequestPermissions(new string[] { Manifest.Permission.AccessCoarseLocation, Manifest.Permission.AccessFineLocation }, 0);
    else
        GetLocation();
}

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
    if (CheckSelfPermission(Manifest.Permission.AccessCoarseLocation) == (int)Permission.Granted &&
            CheckSelfPermission(Manifest.Permission.AccessFineLocation) == (int)Permission.Granted)
        GetLocation();
    else
        Log.Info(tag, "Permission not Granted: Please enter desired Location manually.");
}

void GetLocation()
{
    locationManager = (LocationManager)GetSystemService(LocationService);
    provider = locationManager.GetBestProvider(new Criteria(), false);
    Location location = locationManager.GetLastKnownLocation(provider);
    if (location != null)
        Log.Info(tag, "Location Lat: " + location.Latitude + " Lon: " + location.Longitude);
    else
        Log.Info(tag, "Location is null");
}

জামারিন.এন্ড্রয়েড (সি #) থেকে যে কেউ আসে সে ক্ষেত্রে এটি দরকারী মনে হয়। জাভা বা অ্যান্ড্রয়েড স্টুডিওর জন্য কোডটি কিছুটা ছোট ছোট সিনট্যাক্সের পরিবর্তনের সাথে একই রকম GetLastKnownLocation()হবে getLastKnownLocation()যেমন জাভাতে ছোট ছোট অক্ষর দিয়ে শুরু হওয়া নামগুলি হবে যখন সি # পদ্ধতিতে নামগুলি বড় হাতের অক্ষর দিয়ে শুরু হয়।


0

আমি অবস্থান আপডেট করার জন্য এই সমাধানটি পছন্দ করেছি:

আপডেট অবস্থান

পুনরায় শুরুতে, শর্তটি যুক্ত করুন:

Location myLocation = getLastKnownLocation();
if (myLocation == null) {
      locationManager.requestLocationUpdates(
      LocationManager.PASSIVE_PROVIDER,
      MIN_TIME_BW_UPDATES,
      MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
      Log.d("GPS", "GPS Enabled");
 }

এবং সম্ভবত কিছু বেসিক, তবে জিপিএস চালু আছে তা পরীক্ষা করুন।


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