গুগল ম্যাপের মতো লোকেশন ডায়ালগ সক্ষম করবেন কীভাবে?


129

আমি গুগল প্লে পরিষেবাগুলির সর্বশেষতম সংস্করণ (.0.০) ব্যবহার করেছি এবং তাদের গাইডের দেওয়া পদক্ষেপগুলি অনুসরণ করেছি এবং নীচের মতো অবস্থানের কথোপকথনটি সক্ষম করেছি, যার "কখনই নয়" বোতাম রয়েছে। আমার অ্যাপ্লিকেশনটির বাধ্যতামূলকভাবে অবস্থানের প্রয়োজন তাই আমি ব্যবহারকারীর কাছে "কখনই না" দেখাতে চাই না, কারণ ব্যবহারকারী একবার "কখনই" ক্লিক করেন না, আমি আবার অবস্থান বা অবস্থানের জন্য অনুরোধ করতে অক্ষম।

গুগল ম্যাপে যেমন হ্যাঁ এবং কখনই বাটন না থাকলে কোনও বাটন নেই, কীভাবে এটি অর্জন করতে পারে তার কোনও ধারণা?

আমার অ্যাপের চিত্র এখানে চিত্র বর্ণনা লিখুন

গুগল ম্যাপের চিত্র এখানে চিত্র বর্ণনা লিখুন

উত্তর:


149

লোকেশনসেটিংসউইকুয়েস্ট.বিল্ডারের একটি পদ্ধতি রয়েছে setAlwaysShow(boolean show)দস্তাবেজটি বর্তমানে এটি কিছু করছে না তা নির্দেশ করে (আপডেট করা হয়েছে 2015-07-05: আপডেট হওয়া গুগল ডকুমেন্টেশন এই শব্দটিকে সরিয়ে দিয়েছে), সেটিং builder.setAlwaysShow(true);Google মানচিত্রের আচরণকে সক্ষম করবে: এখানে চিত্র বর্ণনা লিখুন

কোডটি এটি কার্যকর হয়েছে:

if (googleApiClient == null) {
    googleApiClient = new GoogleApiClient.Builder(getActivity())
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).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); //this is the key ingredient
    //**************************

    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();
            final LocationSettingsStates state = result.getLocationSettingsStates();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can initialize location
                    // requests here.
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied. But could be fixed by showing the user
                    // a dialog.
                    try {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        status.startResolutionForResult(
                                getActivity(), 1000);
                    } catch (IntentSender.SendIntentException e) {
                        // Ignore the error.
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way to fix the
                    // settings so we won't show the dialog.
                    break;
            }
        }
    });
}

অ্যান্ড্রয়েড ডকুমেন্টেশন থেকে

কোটলিনের জন্য এখানে দেখুন: https://stackoverflow.com/a/61868985/12478830


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

1
@ কাই হ্যাঁ, কোডটি একটি নেক্সাস 5 এ অবিচ্ছেদে রয়েছে is লগগুলি ব্যবহার করে, আমি দেখতে পাচ্ছি যে যখন লোকেশন পরিষেবাগুলি প্রথম দিকে বন্ধ থাকে, তখন এটি সর্বদা আঘাত হানে RESOLUTION_REQUIRED। তারপরে আমি একবার অবস্থানটি গ্রহণ ও সক্ষম করে নেওয়ার পরে এটি হিট হয়ে যায় SUCCESSএবং পুরোপুরি এড়িয়ে যায় onActivityResult()। টিপে Noবা পিছনে ডায়ালগটি এক সেকেন্ডের জন্য অদৃশ্য হয়ে যায়, তারপরে পুনরায় লোড করুন এবং RESOLUTION_REQUIREDআবার আঘাত করুন । কথোপকথন থেকে মুক্তি পাওয়ার একমাত্র উপায় হ'ল হয় গ্রহণ করা, বা অ্যাপ্লিকেশনটি বন্ধ করে পুনরায় খোলা।
পেজ

2
@pez গ্যালাক্সি এস 4 তে গুগল প্লে পরিষেবাদি 7.5.74 এর সাথে পরীক্ষা করেছে এবং এটি কাজ করে, বাতিল করার ফলে RESOLUTION_REQUIRED কল করার কারণ হয় না। আমার পরামর্শটি হ'ল প্লে পরিষেবাগুলি আপডেট করে আবার চেষ্টা করুন। যদি এটি ব্যর্থ হয়, অন্যরা এই সমস্যার মুখোমুখি হয়েছে এবং সমাধান করেছে কিনা তা দেখার জন্য একটি নতুন স্ট্যাক ওভারফ্লো প্রশ্ন শুরু করুন।
কাই

2
@ কাই এটি আমার পক্ষে কাজ করেছে তবে কোনও ব্যবহারকারী যদি নোট চাপায় তবে কীভাবে আবার ডায়ালগটি দেখানো যায় বা সেখানে কিছু নম্বর যুক্ত হলে সেখানে কোনও কোড যুক্ত করতে হয় ny কোন সাহায্যের খুব প্রশংসা হবে।
গুরপ্রীত সিংহ

1
দ্রষ্টব্য: আপনার ক্রিয়াকলাপ launchModeসেট করা যাবে না singleInstanceঅন্যথায় এটি কাজ করবে না। কথোপকথনটি কখনই প্রদর্শিত হবে না এবং onActivityResultস্বয়ংক্রিয়ভাবে কল হবে। android:launchMode="singleInstance"আপনার ক্রিয়াকলাপের জন্য থাকবেন না AndroidManifest। আমি 3 ঘন্টা পরে এই খুব কঠিন উপায় শিখেছি
ᴛʜᴇᴘᴀᴛᴇʟ

55

যারা হ্যাঁ / না বোতামগুলি পরিচালনা করছেন তাদের জন্য আমি কাইয়ের উত্তরে কিছু পরিবর্তন যুক্ত করতে চাই।

আপনার ক্রিয়াকলাপে এই ধ্রুবকটিকে ঘোষণা করুন

protected static final int REQUEST_CHECK_SETTINGS = 0x1;

settingsrequest()আপনার অন স্টার্টে কল করুন ()

public void settingsrequest()
    {
        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); //this is the key ingredient

        PendingResult<LocationSettingsResult> result =
                LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
        result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(LocationSettingsResult result) {
                final Status status = result.getStatus();
                final LocationSettingsStates state = result.getLocationSettingsStates();
                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        // All location settings are satisfied. The client can initialize location
                        // requests here.
                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        // Location settings are not satisfied. But could be fixed by showing the user
                        // a dialog.
                        try {
                            // Show the dialog by calling startResolutionForResult(),
                            // and check the result in onActivityResult().
                            status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                        } catch (IntentSender.SendIntentException e) {
                            // Ignore the error.
                        }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        // Location settings are not satisfied. However, we have no way to fix the
                        // settings so we won't show the dialog.
                        break;
                }
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
// Check for the integer request code originally supplied to startResolutionForResult().
            case REQUEST_CHECK_SETTINGS:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        startLocationUpdates();
                        break;
                    case Activity.RESULT_CANCELED:
                        settingsrequest();//keep asking if imp or do whatever
                        break;
                }
                break;
        }
    }

1
অফিসিয়াল ডকুমেন্টেশন থেকে পেয়েছেন: developers.google.com/android/references/com/google/android/gms/… আপনার যদি কেবল মানচিত্র যুক্ত করতে হয় তবে এটি ব্যবহার করতে আপনাকে সেই লাইব্রেরি যুক্ত করতে হবে (পুরো প্লে পরিষেবাদির পাঠাগারটি আমদানি না করেই) ): সংকলন 'com.google.android.gms: play-পরিষেবাদি-মানচিত্র: 9.0.2' সংকলন 'com.google.android.gms: খেলার-পরিষেবা-অবস্থান: 9.0.2'
ম্যাটপ্যাগ

এই কথোপকথনের ক্লিক ইভেন্টটি কীভাবে পরিচালনা করতে হবে এবং ডায়লগে কখনও কখনও বোতামটি প্রদর্শন করা উচিত নয়
এম.ওয়েশ্বর্বরান

ActivityOnResult এ স্যুইচ কেস থেকে সেটিংসের অনুরোধ () লাইনটি সরিয়ে দিন .. আপনি কি যা জিজ্ঞাসা করছেন তা কি ???
ভীর 3383

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

আপনি প্রকল্প নির্মান পরিষ্কার প্রয়োজন হতে পারে।
বীর 3383

25

অবস্থান সার্ভিস.সেটেটিংস এপিআই এখন হ্রাস করা হয়েছে, তাই আমরা সেটিংসক্লিয়েন্ট ব্যবহার করি

    LocationRequest mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(10);
        mLocationRequest.setSmallestDisplacement(10);
        mLocationRequest.setFastestInterval(10);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        LocationSettingsRequest.Builder builder = new 
        LocationSettingsRequest.Builder();
        builder.addLocationRequest(mLocationRequest);

তারপরে বর্তমান অবস্থান সেটিংস সন্তুষ্ট কিনা তা পরীক্ষা করে দেখুন। লোকেশনসেটিংস রেসপন্স টাস্কটি তৈরি করুন:

        Task<LocationSettingsResponse> task=LocationServices.getSettingsClient(this).checkLocationSettings(builder.build());

তারপরে শ্রোতা যুক্ত করুন

task.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
            @Override
                    public void onComplete(Task<LocationSettingsResponse> task) {
                        try {
                            LocationSettingsResponse response = task.getResult(ApiException.class);
                            // All location settings are satisfied. The client can initialize location
                            // requests here.

                        } catch (ApiException exception) {
                            switch (exception.getStatusCode()) {
                                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                    // Location settings are not satisfied. But could be fixed by showing the
                                    // user a dialog.
                                    try {
                                        // Cast to a resolvable exception.
                                        ResolvableApiException resolvable = (ResolvableApiException) exception;
                                        // Show the dialog by calling startResolutionForResult(),
                                        // and check the result in onActivityResult().
                                        resolvable.startResolutionForResult(
                                                HomeActivity.this,
                                                101);
                                    } catch (IntentSender.SendIntentException e) {
                                        // Ignore the error.
                                    } catch (ClassCastException e) {
                                        // Ignore, should be an impossible error.
                                    }
                                    break;
                                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                                    // Location settings are not satisfied. However, we have no way to fix the
                                    // settings so we won't show the dialog.
                                    break;
                            }
                        }
                    }
                });

অ্যাক্টিভিটিআরসাল্টে যুক্ত করা হয়েছে

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
        switch (requestCode) {
            case 101:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        // All required changes were successfully made
                        Toast.makeText(HomeActivity.this,states.isLocationPresent()+"",Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        // The user was asked to change settings, but chose not to
                        Toast.makeText(HomeActivity.this,"Canceled",Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
                break;
        }
    }

লিঙ্কটি সেটিংসক্লিয়েন্টটি উল্লেখ করুন


1
পরীক্ষা করে দেখুন stackoverflow.com/a/53277287 @BadLoser ব্যবহার SettingsClient
Ketan রামানি

আমদানির নির্ভরতার নাম কী? প্রতীক টাস্কটি সমাধান করতে পারে না।
ডেনিস

আমি এটি পেয়েছি: বাস্তবায়ন 'com.google.android.gms: play-পরিষেবাদি-কার্য: 16.0.1'
ডেনিস

@ ডেনিস, আমি এর implementation 'com.google.android.gms:play-services-location:16.0.0'পরিবর্তে ব্যবহার করতে পারি ।
শীতলমাইন্ড

25

এটি গুগল ম্যাপের মতো কাজ করছে?
উত্স কোড: https://drive.google.com/open?id=0BzBKpZ4nzNzUOXM2eEhHM3hOZk0

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

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

অথবা

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

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

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

}

এটি আমার আনন্দ
কেশব গেরা

1
ব্রডকাস্ট রিসিভার পোস্টটি খুব দরকারী এবং আমার মত স্ট্যাকওভারফ্লো.com
কেশব গেরা

নিখুঁত সমাধান.
ললিত শর্মা

ধন্যবাদ ললিত শর্মা
কেশব গেরা

আপনি কি দয়া করে লিঙ্কটি আপডেট করতে পারেন, এখনই এটি ভেঙে গেছে, পরিবর্তে কোডটি গিটহাবে পোস্ট করুন
মনোজ পেরুমারথ

7

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

https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi


এটি veer3383 উত্তর হিসাবে একই দেখাচ্ছে। দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন
রকেশ কাশ্যপ

@ রকেশকাশ্যপ হ্যাঁ এটি একই
ম্যাটপ্যাগ

নীচে এটি করা সম্ভব কিনা তা আমি জানতে চেয়েছিলাম: * অবস্থান পাওয়ার জন্য একটি সময়সীমা নির্ধারণ করুন। * প্রয়োজনীয় সমস্ত সেন্সর সক্ষম হয়ে থাকলে এবং সেই অনুযায়ী বার্তাটি দেখান, জিপিএস সেটিংস এপিআই এ চেক করুন। * যদি এটি সম্ভব হয়, কিভাবে একটি টাইমআউট সেট করবেন? এপিআই তৈরি করার সময় আমি এ জাতীয় কোনও সেটিং খুঁজে পাইনি
রাকেশ কাশ্যপ

হ্যালো, অফ স্টেট থেকে জিপিএস চালু করার পরে আমি দ্বিতীয়বারের সাথে মানচিত্র লোড করার বিষয়ে সমস্যা প্রকাশ করেছি, দয়া করে, কেউ আমাকে সহায়তা করুন: stackoverflow.com/questions/44368960/… ধন্যবাদ।
জয়মন মোদী

3
SettingsAPIঅবমুক্ত করা হয়েছে, এখন আপনি SettingsClient developers.google.com/android/references/com/google/android/gms/…
সাইক ক্যাসকি

7

বশ্যতা

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

কোড

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
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.LocationSettingsStates;
import com.google.android.gms.location.LocationSettingsStatusCodes;

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    public static final int REQUEST_LOCATION=001;

    GoogleApiClient googleApiClient;

    LocationManager locationManager;
    LocationRequest locationRequest;
    LocationSettingsRequest.Builder locationSettingsRequest;
    Context context;


    PendingResult<LocationSettingsResult> pendingResult;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            Toast.makeText(this, "Gps is Enabled", Toast.LENGTH_SHORT).show();

        } else {
            mEnableGps();
        }

    }

    public void mEnableGps() {
        googleApiClient = new GoogleApiClient.Builder(context)
                .addApi(LocationServices.API).addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
        googleApiClient.connect();
        mLocationSetting();
    }

    public void mLocationSetting() {
        locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(1 * 1000);
        locationRequest.setFastestInterval(1 * 1000);

        locationSettingsRequest = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);

        mResult();

    }

    public void mResult() {
        pendingResult = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, locationSettingsRequest.build());
        pendingResult.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
                Status status = locationSettingsResult.getStatus();


                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        // All location settings are satisfied. The client can initialize location
                        // requests here.

                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:

                        try {

                            status.startResolutionForResult(MainActivity.this, REQUEST_LOCATION);
                        } catch (IntentSender.SendIntentException e) {

                        }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        // Location settings are not satisfied. However, we have no way to fix the
                        // settings so we won't show the dialog.


                        break;
                }
            }

        });
    }


    //callback method
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
        switch (requestCode) {
            case REQUEST_LOCATION:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        // All required changes were successfully made
                        Toast.makeText(context, "Gps enabled", Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        // The user was asked to change settings, but chose not to
                        Toast.makeText(context, "Gps Canceled", Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
                break;
        }
    }


    @Override
    public void onConnected(@Nullable Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }
}

4

"অবস্থানের জন্য জিপিএস, ওয়াই-ফাই এবং মোবাইল নেটওয়ার্ক ব্যবহার করুন" ডায়ালগের পরিবর্তে আপনি "অবস্থানের জন্য জিপিএস ব্যবহার করুন" অর্জন করতে আপনি বিল্ডারের জন্য বেশ কয়েকটি অবস্থানের অনুরোধও যুক্ত করতে পারেন

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(createLocationRequest(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY))
                .addLocationRequest(createLocationRequest(LocationRequest.PRIORITY_HIGH_ACCURACY))
                .setAlwaysShow(true);

PendingResult<LocationSettingsResult> result =
                LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());

আমার ক্ষেত্রে "অবস্থানের জন্য জিপিএস, ওয়াই-ফাই এবং মোবাইল নেটওয়ার্ক ব্যবহার করুন" বাক্য পেতে PRIORITY_HIGH_ACCURACY ব্যবহার করা যথেষ্ট। তবে এটি আশ্চর্যজনক যে এটি বাস্তব ডিভাইসে কাজ করে তবে সিমুলেটেডে তা ব্যবহার করে না। সিমুলেটর বাক্যটি সর্বদা শুরুতে "জিপিএস ব্যবহার করুন" ছাড়াই থাকে যদিও আমি দেখতে পাই যে সিমুলেটর ডিভাইসে জিপিএস রয়েছে।
মাইকেপ

0

কোটলিনে, এই কোডটি ব্যবহার করুন:

import android.app.Activity
import android.content.Intent
import android.content.IntentSender
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.common.api.GoogleApiClient
import com.google.android.gms.common.api.PendingResult
import com.google.android.gms.common.api.Status
import com.google.android.gms.location.*

class MainActivity : AppCompatActivity() {
    private var googleApiClient: GoogleApiClient? = null
    private val REQUESTLOCATION = 199
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableLoc()
    }
    private fun enableLoc() {
        googleApiClient = GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(object : GoogleApiClient.ConnectionCallbacks {
                override fun onConnected(bundle: Bundle?) {}
                override fun onConnectionSuspended(i: Int) {
                    googleApiClient?.connect()
                }
            })
            .addOnConnectionFailedListener {
            }.build()
        googleApiClient?.connect()
        val locationRequest = LocationRequest.create()
        locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
        locationRequest.interval = 30 * 1000.toLong()
        locationRequest.fastestInterval = 5 * 1000.toLong()
        val builder = LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest)
        builder.setAlwaysShow(true)
        val result: PendingResult<LocationSettingsResult> =
            LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build())
        result.setResultCallback { result ->
            val status: Status = result.status
            when (status.statusCode) {
                LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> try {
                    status.startResolutionForResult(
                        this@MainActivity,
                        REQUESTLOCATION
                    )
                } catch (e: IntentSender.SendIntentException) {
                }
            }
        }
    }
    override fun onActivityResult(
        requestCode: Int,
        resultCode: Int,
        data: Intent?
    ) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            REQUESTLOCATION -> when (resultCode) {
                Activity.RESULT_OK -> Log.d("abc","OK")
                Activity.RESULT_CANCELED -> Log.d("abc","CANCEL")
            }
        }
    }
}

0

অগ্রভাগে ব্যবহারকারীর অবস্থান পেতে দয়া করে আমার খুব সাধারণ সমাধানটি পরীক্ষা করে দেখুন।

  1. জিপিএস সেটিং ডায়ালগ
  2. লাইভ ডেটা সহ ব্যবহারকারীর অবস্থান।
  3. লোকেশন ইউটিলিটি ক্লাস হ'ল লোকেশন আপডেটগুলি বিরতি / পুনঃসূচনা করতে সচেতন কার্যকলাপ জীবনচক্র।
  4. সর্বশেষতম FusedLocationProviderClient সহ অবস্থান

https://github.com/Maqsood007/UserLocation-Android/blob/master/app/src/main/java/jetpack/skill/userlocation_android/utils/LocationUtility.kt

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

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

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