সেটিংস পৃষ্ঠায় নেভিগেট না করে অবস্থান পরিষেবাগুলি চালু করুন


121

ব্যবহারকারীদের সেটিংস পৃষ্ঠাতে যেতে এবং লোকেশন পরিষেবাদি সক্ষম করতে এবং আবার ফিরে আসতে অনুরোধ করার প্রচলিত পদ্ধতির বিপরীতে আমি সর্বশেষ অ্যাপ্লিকেশনগুলির কয়েকটিতে একই কাজ করার একটি সহজ উপায় লক্ষ্য করেছি।

স্ক্রিনশটের নীচে উল্লেখ করে, এটি কেবলমাত্র একটি ক্লিকের সাথে লোকেশন পরিষেবাদি সক্ষম করতে ব্যবহারকারীকে একটি কথোপকথনের অনুরোধ জানায় এবং এটি সেই অ্যাপগুলিতে কাজ করে।

আমি কীভাবে এটি অর্জন করতে পারি?

এখানে চিত্র বর্ণনা লিখুন


13
নেতিবাচক ভোটার (গুলি) এর কারণ প্রদান করতে পারেন?
গামা

3
এই প্রশ্ন জিজ্ঞাসা করার জন্য আপনাকে ধন্যবাদ। ভোট দিয়েছেন
লোকেশ পান্ডে

@ গামা এইভাবে স্ট্যাকওভারফ্লো কাজ করে! জনগণের ভোট হ্রাস করার কোনও কারণ প্রয়োজন নেই। একই সাথে এ জাতীয় শত্রু এবং দুর্দান্ত সম্প্রদায়!

উত্তর:


150

এই ডায়ালগের দ্বারা তৈরি করা হয় LocationSettingsRequest.Builder Google Play পরিষেবাগুলির পাওয়া যায়।

আপনার অ্যাপ্লিকেশনটিতে আপনাকে নির্ভরতা যুক্ত করতে হবে build.gradle:

compile 'com.google.android.gms:play-services-location:10.0.1'

তারপরে আপনি এই সর্বনিম্ন উদাহরণটি ব্যবহার করতে পারেন:

private void displayLocationSettingsRequest(Context context) {
    GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context)
            .addApi(LocationServices.API).build();
    googleApiClient.connect();

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(10000);
    locationRequest.setFastestInterval(10000 / 2);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
    builder.setAlwaysShow(true);

    PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(LocationSettingsResult result) {
            final Status status = result.getStatus();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    Log.i(TAG, "All location settings are satisfied.");
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to upgrade location settings ");

                    try {
                        // Show the dialog by calling startResolutionForResult(), and check the result
                        // in onActivityResult().
                        status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException e) {
                        Log.i(TAG, "PendingIntent unable to execute request.");
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog not created.");
                    break;
            }
        }
    });
}

আপনি এখানে সম্পূর্ণ উদাহরণ খুঁজে পেতে পারেন ।


1
আমি দুঃখিত তবে আমি প্রথম দুটি লাইন বুঝতে পারি নি:You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
গামা

আপনি আরও তথ্য পেতে পারেন কিভাবে সেটিংস আপ Google প্লে সার্ভিস এখানে
Mattia Maestrini

build.gradle কোথায় অবস্থিত?
গামা

আপনার অ্যাপ্লিকেশন মডিউল ডিরেক্টরি ভিতরে। সাধারণত ডিরেক্টরিটির নাম হয়app
মাতটিয়া মায়েস্ট্রিনি

3
সেটিংসএপি এখন চিত্রিত হয়েছে।
সাগর কাঁচ

27

নিচে উল্লিখিত ধাপগুলি অনুসরণ করুন

1)LocationRequest আপনার ইচ্ছা অনুযায়ী একটি তৈরি করুন

LocationRequest mLocationRequest = LocationRequest.create()
           .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
           .setInterval(10 * 1000)
           .setFastestInterval(1 * 1000);

2) একটি তৈরি করুনLocationSettingsRequest.Builder

LocationSettingsRequest.Builder settingsBuilder = new LocationSettingsRequest.Builder()
               .addLocationRequest(mLocationRequest);
settingsBuilder.setAlwaysShow(true);

3)LocationSettingsResponse Task নিম্নলিখিত কোড ব্যবহার করে পান

Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(this)
              .checkLocationSettings(settingsBuilder.build());

দ্রষ্টব্য: LocationServices.SettingsApi তাই হ্রাস করা হয়েছে, SettingsClientপরিবর্তে ব্যবহার করুন ।

4)OnCompleteListener টাস্ক থেকে ফলাফল পেতে একটি যুক্ত করুন hen যখন Taskসম্পূর্ণ হয়, ক্লায়েন্টটি LocationSettingsResponseবস্তু থেকে স্থিতি কোডটি দেখে অবস্থান সেটিংস পরীক্ষা করতে পারে ।

result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
    @Override
    public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
    try {
        LocationSettingsResponse response = 
                          task.getResult(ApiException.class);
        } catch (ApiException ex) {
            switch (ex.getStatusCode()) {
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    try {
                        ResolvableApiException resolvableApiException = 
                                 (ResolvableApiException) ex;
                            resolvableApiException
                                   .startResolutionForResult(MapsActivity.this, 
                                         LOCATION_SETTINGS_REQUEST);
                    } catch (IntentSender.SendIntentException e) {

                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:

                    break;
            }
        }
    }
});  

কেএসই 1:: LocationSettingsStatusCodes.RESOLUTION_REQUIRED অবস্থানটি সক্ষম করা নেই তবে, আমরা ব্যবহারকারীকে ডায়লগটি দিয়ে (কল করে startResolutionForResult) লোকেশনটি চালু করার অনুরোধ করে লোকেশন সক্ষম করতে বলতে পারি ।

গুগল ম্যাপ অবস্থান সেটিংস অনুরোধ

CASE 2:: LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE অবস্থান সেটিংস সন্তুষ্ট নয়। তবে আমাদের কাছে সেটিংস ঠিক করার কোনও উপায় নেই তাই আমরা সংলাপটি প্রদর্শন করব না।

5) OnActivityResult আমরা অবস্থান সেটিংস সংলাপে ব্যবহারকারীর ক্রিয়া পেতে পারি। RESULT_OK=> ব্যবহারকারী অবস্থানটি চালু করেছে। RESULT_CANCELLED- ব্যবহারকারী লোকেশন সেটিংয়ের অনুরোধ প্রত্যাখ্যান করেছে।


11

এর কাজ গুগল মানচিত্রের অনুরূপ

Build.gradle ফাইলটিতে নির্ভরতা যুক্ত করুন

compile 'com.google.android.gms:play-services:8.3.0'

এটা বা ওটা

compile 'com.google.android.gms:play-services-location:10.0.1'

এখানে চিত্র বর্ণনা লিখুন

import android.content.Context;
import android.content.IntentSender;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResult;
import com.google.android.gms.location.LocationSettingsStatusCodes;

import java.util.List;

public class LocationOnOff_Similar_To_Google_Maps extends AppCompatActivity {

    protected static final String TAG = "LocationOnOff";

    private GoogleApiClient googleApiClient;
    final static int REQUEST_LOCATION = 199;

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

        this.setFinishOnTouchOutside(true);

        // Todo Location Already on  ... start
        final LocationManager manager = (LocationManager) LocationOnOff_Similar_To_Google_Maps.this.getSystemService(Context.LOCATION_SERVICE);
        if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(LocationOnOff_Similar_To_Google_Maps.this)) {
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps already enabled",Toast.LENGTH_SHORT).show();
            finish();
        }
        // Todo Location Already on  ... end

        if(!hasGPSDevice(LocationOnOff_Similar_To_Google_Maps.this)){
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps not Supported",Toast.LENGTH_SHORT).show();
        }

        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(LocationOnOff_Similar_To_Google_Maps.this)) {
            Log.e("keshav","Gps already enabled");
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps not enabled",Toast.LENGTH_SHORT).show();
            enableLoc();
        }else{
            Log.e("keshav","Gps already enabled");
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps already enabled",Toast.LENGTH_SHORT).show();
        }
    }


    private boolean hasGPSDevice(Context context) {
        final LocationManager mgr = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        if (mgr == null)
            return false;
        final List<String> providers = mgr.getAllProviders();
        if (providers == null)
            return false;
        return providers.contains(LocationManager.GPS_PROVIDER);
    }

    private void enableLoc() {

        if (googleApiClient == null) {
            googleApiClient = new GoogleApiClient.Builder(LocationOnOff_Similar_To_Google_Maps.this)
                    .addApi(LocationServices.API)
                    .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                        @Override
                        public void onConnected(Bundle bundle) {

                        }

                        @Override
                        public void onConnectionSuspended(int i) {
                            googleApiClient.connect();
                        }
                    })
                    .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                        @Override
                        public void onConnectionFailed(ConnectionResult connectionResult) {

                            Log.d("Location error","Location error " + connectionResult.getErrorCode());
                        }
                    }).build();
            googleApiClient.connect();

            LocationRequest locationRequest = LocationRequest.create();
            locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            locationRequest.setInterval(30 * 1000);
            locationRequest.setFastestInterval(5 * 1000);
            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                    .addLocationRequest(locationRequest);

            builder.setAlwaysShow(true);

            PendingResult<LocationSettingsResult> result =
                    LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
            result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
                @Override
                public void onResult(LocationSettingsResult result) {
                    final Status status = result.getStatus();
                    switch (status.getStatusCode()) {
                        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                            try {
                                // Show the dialog by calling startResolutionForResult(),
                                // and check the result in onActivityResult().
                                status.startResolutionForResult(LocationOnOff_Similar_To_Google_Maps.this, REQUEST_LOCATION);

                                finish();
                            } catch (IntentSender.SendIntentException e) {
                                // Ignore the error.
                            }
                            break;
                    }
                }
            });
        }
    }

}

2
সেটিংসএপি এখন চিত্রিত হয়েছে
সাগর

2
সেটিংসএপি এখন হ্রাস করা হয়েছে। এখন
সেটিংসক্লিয়েন্ট

9
implementation 'com.google.android.gms:play-services-location:16.0.0'

পরিবর্তনশীল ঘোষণা

private SettingsClient mSettingsClient;
private LocationSettingsRequest mLocationSettingsRequest;
private static final int REQUEST_CHECK_SETTINGS = 214;
private static final int REQUEST_ENABLE_GPS = 516;

কোডের নীচে ব্যবহার করে ডায়ালগ খুলুন

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(new LocationRequest().setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY));
builder.setAlwaysShow(true);
mLocationSettingsRequest = builder.build();

mSettingsClient = LocationServices.getSettingsClient(YourActivity.this);

mSettingsClient
    .checkLocationSettings(mLocationSettingsRequest)
    .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
        @Override
        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
            //Success Perform Task Here
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            int statusCode = ((ApiException) e).getStatusCode();
            switch (statusCode) {
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    try {
                        ResolvableApiException rae = (ResolvableApiException) e;
                        rae.startResolutionForResult(YourActivity.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException sie) {
                        Log.e("GPS","Unable to execute request.");
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    Log.e("GPS","Location settings are inadequate, and cannot be fixed here. Fix in Settings.");
            }
        }
    })
    .addOnCanceledListener(new OnCanceledListener() {
        @Override
        public void onCanceled() {
            Log.e("GPS","checkLocationSettings -> onCanceled");
        }
    });

onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CHECK_SETTINGS) {
        switch (resultCode) {
            case Activity.RESULT_OK:
                //Success Perform Task Here
                break;
            case Activity.RESULT_CANCELED:
                Log.e("GPS","User denied to access location");
                openGpsEnableSetting();
                break;
        }
    } else if (requestCode == REQUEST_ENABLE_GPS) {
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if (!isGpsEnabled) {
            openGpsEnableSetting();
        } else {
            navigateToUser();
        }
    }
}

private void openGpsEnableSetting() {
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivityForResult(intent, REQUEST_ENABLE_GPS);
}   

ধন্যবাদ! আপনি যদি এই কোডটি খণ্ডটিতে ব্যবহার করেন তবে rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)কল করার পরিবর্তে stackoverflow.com/a/39579124/2914140 দেখুন : startIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)অন্যথায় কল করা onActivityResult()হবে না।
শীতলমাইন্ড

@ কুলমাইন্ড ধন্যবাদ এমন কারও জন্য ব্যবহার করা যেতে পারে যার খণ্ড খণ্ডের জন্য এটি প্রয়োজন
কেতন রামানি

@ কুলমাইন্ড, startIntentSenderForResultপদ্ধতিতে openGpsEnableSetting()কি অনুরূপ কিছু ব্যবহার করা সম্ভব ?
অ্যালিটন অলিভিরা

অ্যালিটন অলিভেরা, আপনি কি বিশদে বর্ণনা করতে পারবেন? কোডে openGpsEnableSetting()জিপিএস সেটিংস সক্ষম করতে ডায়ালগটি কেবল শুরু হয়। এটি শেষ হওয়ার পরে, onActivityResult()সাথে ডাকা হয় requestCode == REQUEST_ENABLE_GPS
কুলমাইন্ড

onActivityResult()ক্রিয়াকলাপ থেকে আহ্বান করা হয়েছিল এবং আমি ভাবছিলাম যে ফলাফলটি Fragmentপছন্দ মতো করে ফেলা সম্ভব কিনা startIntentSenderForResult
অ্যালিটন অলিভিরা

8

ধন্যবাদ মাতিয়া মায়েস্ট্রিনি +1

জামারিন দ্রবণ:

using Android.Gms.Common.Apis;
using Android.Gms.Location;

public const int REQUEST_CHECK_SETTINGS = 0x1;

private void DisplayLocationSettingsRequest()
{
    var googleApiClient = new GoogleApiClient.Builder(this).AddApi(LocationServices.API).Build();
    googleApiClient.Connect();

    var locationRequest = LocationRequest.Create();
    locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
    locationRequest.SetInterval(10000);
    locationRequest.SetFastestInterval(10000 / 2);

    var builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
    builder.SetAlwaysShow(true);

    var result = LocationServices.SettingsApi.CheckLocationSettings(googleApiClient, builder.Build());
    result.SetResultCallback((LocationSettingsResult callback) =>
    {
        switch (callback.Status.StatusCode)
        {
            case LocationSettingsStatusCodes.Success:
                {
                    DoStuffWithLocation();
                    break;
                }
            case LocationSettingsStatusCodes.ResolutionRequired:
                {
                    try
                    {
                        // Show the dialog by calling startResolutionForResult(), and check the result
                        // in onActivityResult().
                        callback.Status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS);
                    }
                    catch (IntentSender.SendIntentException e)
                    {
                    }

                    break;
                }
            default:
                {
                    // If all else fails, take the user to the android location settings
                    StartActivity(new Intent(Android.Provider.Settings.ActionLocationSourceSettings));
                    break;
                }
        }
    });
}

protected override void OnActivityResult(int requestCode, Android.App.Result resultCode, Intent data)
{
    switch (requestCode)
    {
        case REQUEST_CHECK_SETTINGS:
            {
                switch (resultCode)
                {
                    case Android.App.Result.Ok:
                        {
                            DoStuffWithLocation();
                            break;
                        }
                    case Android.App.Result.Canceled:
                        {
                            //No location
                            break;
                        }
                }
                break;
            }
    }
}

বিঃদ্রঃ:

এটি হুয়াওয়ে বা অন্যান্য ডিভাইসগুলির সাথে কাজ করবে না যেখানে গুগল পরিষেবাগুলি ইনস্টল করা নেই।


এটা কাজ করছে না!! আপনি কি দয়া করে সম্পূর্ণ কোডটি ভাগ করতে পারেন
ওমকার

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

@ ওমকার আপনি কি জ্যামারিন ইনস্টল করেছেন? গুগলপ্লে সার্ভিসেস? লোকেশনের মাধ্যমে অবস্থান? আপনি উপরের দুটি লাইন অন্তর্ভুক্ত করেছেন using android.Gms.Common.Apis; using Android.Gms.Location;? কল করার পরে LocationServices.SettingsApi.CheckLocationSettingsআপনি কি একটি কলব্যাক পাবেন result.SetResultCallback(? যারা প্রতিটি একটি বিরতি বিন্দু রাখুন এবং কী কোড করছে
পিয়ের

হ্যাঁ আমি সমস্ত পূর্বশর্ত যুক্ত করেছি। এবং আমি ফলাফল হিসাবে আইডি = 1, স্থিতি = অপেক্ষা অপসারণ, পদ্ধতি = (নাল) হিসাবে পেয়েছি। তবে এই অপেক্ষার সময়টি দীর্ঘ সময়ের জন্য অপেক্ষা করা অসীম, এবং কোনও ফলাফল পায় নি।
ওমকার

4

অ্যান্ড্রয়েড মার্শমালো 6 রানটাইমের অনুমতি সমর্থন করে। রানটাইম অনুমতিগুলি কেবল মার্শমেলো এবং মার্শমেলো প্রাকে কাজ করে এটি এখনও পুরানো পথে কাজ করে।

আপনি এই অ্যান্ড্রয়েড বিকাশকারী অফিসিয়াল ভিডিওতে এটি সম্পর্কে আরও শিখতে পারেন:

https://www.youtube.com/watch?v=C8lUdPVSzDk

এবং অনুমতির জন্য অনুরোধ করছে: http://developer.android.com/training/permitted/requesting.html


মার্শমেলো এপিআই কি উন্নয়নের উদ্দেশ্যে উপলব্ধ?
গামা

সুতরাং স্ক্রিনশটের মাধ্যমে দেখানো ওয়ার্কফ্লো কেবল মার্শমেলো এবং পরে অর্জন করা যায়?
গামা

হ্যাঁ, ডকুমেন্টেশনে যেমন বলা হয়েছে এটি এপিআই স্তরের 23 স্তর তাই এটি কেবল মার্শমালো এবং আরও নতুনতে কাজ করবে।
শারজ

আমার নিজস্ব কাস্টম সংলাপে একই আচরণ অর্জনের যে কোনও উপায়
শ্রুতি রায়

4

উত্তরের জন্য আপনাকে মাতিয়া মায়েস্ট্রিনি ধন্যবাদ, আমি এটি ব্যবহার করে যুক্ত করতে চাই

compile 'com.google.android.gms:play-services-location:8.1.0'

যথেষ্ট হবে। এটি আপনার অ্যাপ্লিকেশনটিকে অপ্রয়োজনীয় গ্রন্থাগারগুলি সহ প্রতিরোধ করে এবং আপনার পদ্ধতিটি কম রাখার জন্য সহায়তা করে।


2

কোটলিন সলিউশন

যোগ build.gradle(Module:app)

implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'

এর পরে এই ফাংশনটি তৈরি করুন

fun enablegps() {

    val mLocationRequest = LocationRequest.create()
        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
        .setInterval(2000)
        .setFastestInterval(1000)

    val settingsBuilder = LocationSettingsRequest.Builder()
        .addLocationRequest(mLocationRequest)
    settingsBuilder.setAlwaysShow(true)

    val result = LocationServices.getSettingsClient(this).checkLocationSettings(settingsBuilder.build())
    result.addOnCompleteListener { task ->

        //getting the status code from exception
        try {
            task.getResult(ApiException::class.java)
        } catch (ex: ApiException) {

            when (ex.statusCode) {

                LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> try {

                    Toast.makeText(this,"GPS IS OFF",Toast.LENGTH_SHORT).show()

                    // Show the dialog by calling startResolutionForResult(), and check the result
                    // in onActivityResult().
                    val resolvableApiException = ex as ResolvableApiException
                    resolvableApiException.startResolutionForResult(this,REQUEST_CHECK_SETTINGS
                    )
                } catch (e: IntentSender.SendIntentException) {
                    Toast.makeText(this,"PendingIntent unable to execute request.",Toast.LENGTH_SHORT).show()

                }

                LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {

                    Toast.makeText(
                        this,
                        "Something is wrong in your GPS",
                        Toast.LENGTH_SHORT
                    ).show()

                }


            }
        }



    }


}

1

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

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Location Permission");
        builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app.");
        builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);}
        });
        builder.setNegativeButton(android.R.string.no, null);
        builder.show();
    }
} else {
    // do programatically as show in the other answer 
}

এবং onRequestPermissionsResultনীচের মতো পদ্ধতিটি ওভাররাইড করুন :

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_COARSE_LOCATION: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.d(TAG, "coarse location permission granted");
                } else {
                    Intent intent = new Intent();
                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            }
        }
    }

আরেকটি পন্থা আপনার কাছে ব্যবহার করতে পারেন SettingsApi জিজ্ঞাসা যা অবস্থান প্রদানকারী (গুলি) সক্ষম করা আছে। যদি কোনওটি সক্ষম না হয়, আপনি অ্যাপ্লিকেশন থেকে সেটিংস পরিবর্তন করতে একটি ডায়লগ প্রম্পট করতে পারেন।


1

আমার গবেষণার সময় আমি যে সহজ উপায়টি পেয়েছি তা হ'ল এই অবস্থানের অনুরোধ প্রক্রিয়াটির জন্য একটি ইউটিল ক্লাস তৈরি করা এবং তারপরে আমাদের জন্য জিপিএস চালু করার জন্য এটি কল করা।

এই ব্লগ চেক করুন! এটি পুরো ঘটনাটি বলেছিল।

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