অবস্থান পরিষেবাদি সক্ষম করা আছে কিনা তা কীভাবে পরীক্ষা করবেন?


228

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

আমার এমন একটি পদ্ধতি দরকার যা তারা সক্ষম থাকলে "সত্য" এবং যদি "মিথ্যা" না থাকে তবে (তাই শেষ ক্ষেত্রে আমি তাদের সক্ষম করার জন্য একটি ডায়ালগ দেখাতে পারি)।


3
আমি জানি এটি একটি পুরানো বিষয়, তবে যারা অনুসরণ করতে পারে তাদের জন্য ... গুগল এটির জন্য একটি এপিআই প্রকাশ করেছে; ডেভেলপারস
google.com/android/references/com/google/android/gms/…


এফওয়াইআই: সেটিংসএপি এখন হ্রাস করা হয়েছে। এর পরিবর্তে বিকাশকারীগণ // অ্যান্ড্রয়েড / রেফারেন্স / কম্বল / গুগল / অ্যান্ড্রয়েড / জিএমএস / ......... ব্যবহার করুন।
রাজীব

উত্তর:


361

আপনি জিপিএস সরবরাহকারী এবং নেটওয়ার্ক সরবরাহকারী সক্ষম আছেন কি না তা পরীক্ষা করতে নীচের কোডটি ব্যবহার করতে পারেন।

LocationManager lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
boolean gps_enabled = false;
boolean network_enabled = false;

try {
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch(Exception ex) {}

try {
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {}

if(!gps_enabled && !network_enabled) {
    // notify user
    new AlertDialog.Builder(context)
        .setMessage(R.string.gps_network_not_enabled)
        .setPositiveButton(R.string.open_location_settings, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        }
        .setNegativeButton(R.string.Cancel,null)
        .show();    
}

এবং ম্যানিফেস্ট ফাইলে আপনাকে নিম্নলিখিত অনুমতিগুলি যুক্ত করতে হবে

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

কোডের জন্য আপনাকে ধন্যবাদ। লোকেশন ম্যানেজারের জন্য যাচাই করা: lm.getAllProviders().contains(LocationManager.GPS_PROVIDER)(বা NETWORK_PROVIDER) নিশ্চিত করে তুলবে যে যেখানে কোনও নেটওয়ার্ক বিকল্প নেই সেখানে আপনি ব্যবহারকারীকে সেটিংস পৃষ্ঠায় ফেলবেন না।
পিটার

26
এছাড়াও: Settings.ACTION_SECURITY_SETTINGSহওয়া উচিতSettings.ACTION_LOCATION_SOURCE_SETTINGS
পিটার

2
ফোনটি বিমান মোডে রয়েছে কিনা তা আপনি পরীক্ষা করে দেখতে পারেন এবং এটি পরিচালনা করতে পারেন .... স্ট্যাকওভারফ্লো
জন

2
আমার কাছে lm.isPoviderEnabled (অবস্থানManager.GPS_PROVIDER) নিয়ে কিছু সমস্যা ছিল যা সর্বদা মিথ্যা ফিরত। আপনি প্লে পরিষেবাদির নতুন সংস্করণটি ব্যবহার করার সময় এমনটি ঘটেছিল বলে মনে হয়: সেটিংসের ক্রিয়াকলাপটি না দেখিয়ে ডায়ালগ থেকে আপনি আপনার জিপিএস চালু করতে পারেন এমন একটি ডায়ালগ দেখায় one ব্যবহারকারী যখন সেই কথোপকথন থেকে জিপিএস ঘুরিয়ে দেয়, জিপিএস চালু থাকা সত্ত্বেও, উক্তিটি সর্বদা মিথ্যা হয়ে যায়
মার্সেলো নোগুটি

7
এছাড়াও খালি, বিভ্রান্তিকর, অকেজো চেষ্টা-ব্লক করা উচিত নয়
অনুলিপি

225

আমি এই কোডটি পরীক্ষার জন্য ব্যবহার করি:

public static boolean isLocationEnabled(Context context) {
    int locationMode = 0;
    String locationProviders;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);

        } catch (SettingNotFoundException e) {
            e.printStackTrace();
            return false;
        }

        return locationMode != Settings.Secure.LOCATION_MODE_OFF;

    }else{
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return !TextUtils.isEmpty(locationProviders);
    }


} 

7
স্পষ্টতার জন্য, ক্যাচ ব্লকে মিথ্যা ফিরতে চাইবে। অন্যথায় অবস্থানের শুরুটি সেটিংস-এ শুরু করুন S
রায়ানলিয়নার্ড

2
এটি একটি ভাল উত্তর কারণ এটি পুরানো এবং নতুন অ্যান্ড্রয়েড অবস্থান উভয়ই এপিআইয়ের সাথে কাজ করে।
ডিয়েডেরিক

2
LOCATION_PROVIDERS_ALLOWED - লিংক এই ধ্রুবক এপিআই স্তর 19 আমরা LOCATION_MODE এবং MODE_CHANGED_ACTION (অথবা PROVIDERS_CHANGED_ACTION) ব্যবহার করা আবশ্যক এ অসমর্থিত হয়েছে
Choletski

3
এই উত্তরটি সঠিক উত্তর হিসাবে গ্রহণ করা উচিত ছিল। অবস্থান ম্যানেজ.আর.সি.প্রাইভাইডারএবলযুক্ত () পদ্ধতিটি আমার ৪.৪ ডিভাইসে বিশ্বাসযোগ্য নয় (এবং যেমন আমি দেখেছি যে অন্যান্য বিকাশকারীদের অন্যান্য ওএস সংস্করণেও একই সমস্যা ছিল)। আমার ক্ষেত্রে এটি প্রতিটি ক্ষেত্রে জিপিএসের জন্য সত্য ফিরে আসে (লোকেশন পরিষেবাদি সক্ষম করা আছে কি না তা বিবেচ্য নয়)। এই দুর্দান্ত সমাধানের জন্য ধন্যবাদ!
strongmayer

2
এটি আমার পরীক্ষার ডিভাইস, স্যামসুং এসএইচভি-ই 16060, অ্যান্ড্রয়েড 4.1.2, এপিআই 16 এ কাজ করে নি Although যদিও আমি জিপিএস অফলাইন করি, এই ফাংশনটি এখনও সত্য হয়ে যায়। আমি অ্যান্ড্রয়েড নওগাত, এপিআই 7.1 এ এটি পরীক্ষা করেছিলাম
হেন্দ্রডাব্লুডি

37

যেমনটি এখন 2020 সালে

সর্বশেষ, সেরা এবং সংক্ষিপ্ততম উপায়

public static Boolean isLocationEnabled(Context context)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// This is new method provided in API 28
            LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
            return lm.isLocationEnabled();
        } else {
// This is Deprecated in API 28
            int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                    Settings.Secure.LOCATION_MODE_OFF);
            return  (mode != Settings.Secure.LOCATION_MODE_OFF);

        }
    }

1
দুর্দান্ত! কিন্তু আরও ভাল, ঢালাই পরিত্রাণ পেতে এবং সরাসরি পাস LocationManager.classমধ্যে getSystemServiceপদ্ধতি কারণ কল এপিআই 23 প্রয়োজন ;-)
Mackovich

6
অথবা আপনি পরিবর্তে লোকেশনম্যানেজারকম্প্যাট ব্যবহার করতে পারেন । :)
মোককুন

রিটার্ন lm! = নাল && lm.isLocationEn सक्षम () ব্যবহার করুন; পরিবর্তে lm.isLocationEn सक्षम ();
ডঃ ডিএস

35

আপনি এই কোডটি ব্যবহারকারীদের সেটিংসে পরিচালিত করতে ব্যবহার করতে পারেন, যেখানে তারা জিপিএস সক্ষম করতে পারে:

    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    if( !locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ) {
        new AlertDialog.Builder(context)
            .setTitle(R.string.gps_not_found_title)  // GPS not found
            .setMessage(R.string.gps_not_found_message) // Want to enable?
            .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
                    owner.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton(R.string.no, null)
            .show();
    }

1
অনেক ধন্যবাদ, তবে জিপিএস চেক করার জন্য আমার কোডের দরকার নেই তবে কেবল লোকেশন সার্ভিসেস।
মেরিলিথ

1
অবস্থান পরিষেবাদি সর্বদা উপলব্ধ, তবে বিভিন্ন সরবরাহকারী অনুপলব্ধ হতে পারে।
লেনিক

4
@ এলেনিক, কিছু ডিভাইস একটি সেটিংস সরবরাহ করে ("সেটিংস> ব্যক্তিগত> অবস্থান পরিষেবাদি> আমার অবস্থানে অ্যাক্সেস" এর অধীনে) যা নির্দিষ্ট সরবরাহকারী সক্ষম থাকলেও পুরোপুরি অবস্থান সনাক্তকরণ সক্ষম / অক্ষম করে বলে মনে হয়। আমি প্রথম ফোনটি দেখেছিলাম এমন একটি ফোনের সাথে আমি যা পরীক্ষা করে দেখছি এবং ওয়াইফাই এবং জিপিএস উভয়ই সক্ষম করা সত্ত্বেও তারা মৃত দেখা গেছে ... আমার অ্যাপে। দুর্ভাগ্যক্রমে, আমি সেটিংটি সক্ষম করেছি এবং সেই "আমার অবস্থানে অ্যাক্সেস" সেটিংস অক্ষম করার পরেও মূল দৃশ্যের পুনরুত্পাদন করতে পারি না। সুতরাং আমি বলতে পারি না যে সেটিংটি isProviderEnabled()এবং getProviders(true)পদ্ধতিগুলিকে প্রভাবিত করে ।
অজানারি বিয়ার

... আমি অন্য কেউ যদি একই ইস্যুতে চালিত হয় তবে আমি কেবল সেখানে এটি ফেলে দিতে চেয়েছিলাম। আমি অন্যান্য ডিভাইসগুলির সাথে পরীক্ষার আগে সেটিংটি কখনও দেখিনি। এটি সিস্টেম-বিস্তৃত অবস্থান-শনাক্তকরণের কিল সুইচ বলে মনে হচ্ছে। এই ধরনের সেটিং সক্ষম (বা অক্ষম, আপনি কীভাবে দেখুন তার উপর নির্ভর করে) কীভাবে কীভাবে isProviderEnabled()এবং getProviders(true)পদ্ধতিগুলি কীভাবে প্রতিক্রিয়া জানায় সে সম্পর্কে যদি কারও অভিজ্ঞতা থাকে তবে আপনি কীভাবে মুখোমুখি হয়েছিলেন তা জানার জন্য আমি খুব কৌতূহল বোধ করব।
অজানারি বিয়ার

25

অ্যান্ড্রয়েড এক্সে স্থানান্তরিত করুন এবং ব্যবহার করুন

implementation 'androidx.appcompat:appcompat:1.1.0'

এবং লোকেশনম্যানেজারকম্প্যাট ব্যবহার করুন

জাবাতে

private boolean isLocationEnabled(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    return LocationManagerCompat.isLocationEnabled(locationManager);
}

কোটলিনে

private fun isLocationEnabled(context: Context): Boolean {
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return LocationManagerCompat.isLocationEnabled(locationManager)
}

এটি অ্যান্ড্রয়েড 1.0 থেকে সমস্ত অ্যান্ড্রয়েড সংস্করণে কাজ করে। তবে দ্রষ্টব্য Before API version LOLLIPOP [API Level 21], this method would throw SecurityException if the location permissions were not sufficient to use the specified provider.সুতরাং আপনার কাছে যদি নেটওয়ার্ক বা জিপিএস সরবরাহকারীর জন্য অনুমতি না থাকে তবে এটি সক্ষম রয়েছে তার উপর নির্ভর করে এটি ব্যতিক্রম হতে পারে। আরও তথ্যের জন্য উত্স কোড পরীক্ষা করুন।
xuiqzy

15

উপরের উত্তরটি বন্ধ করে দেওয়া, এপিআই 23 তে আপনাকে "বিপজ্জনক" অনুমতিগুলি পরীক্ষা করার পাশাপাশি সিস্টেমের নিজেই যাচাই করতে হবে:

public static boolean isLocationServicesAvailable(Context context) {
    int locationMode = 0;
    String locationProviders;
    boolean isAvailable = false;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }

        isAvailable = (locationMode != Settings.Secure.LOCATION_MODE_OFF);
    } else {
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        isAvailable = !TextUtils.isEmpty(locationProviders);
    }

    boolean coarsePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED);
    boolean finePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);

    return isAvailable && (coarsePermissionCheck || finePermissionCheck);
}

প্রতীক Manifest.permission.ACCESS_COARSE_LOCATION এবং Manifest.permission.ACCESS_FINE_LOCATION সমাধান করা যাবে না
গেন্নাদি Kozlov


7

যদি কোনও সরবরাহকারী সক্ষম না হয় তবে "প্যাসিভ" হ'ল সর্বোত্তম সরবরাহকারী। Https://stackoverflow.com/a/4519414/621690 দেখুন

    public boolean isLocationServiceEnabled() {
        LocationManager lm = (LocationManager)
                this.getSystemService(Context.LOCATION_SERVICE);
        String provider = lm.getBestProvider(new Criteria(), true);
        return (StringUtils.isNotBlank(provider) &&
                !LocationManager.PASSIVE_PROVIDER.equals(provider));
    }

7

হ্যাঁ আপনি নীচের কোডটি যাচাই করতে পারেন:

public boolean isGPSEnabled(Context mContext) 
{
    LocationManager lm = (LocationManager)
    mContext.getSystemService(Context.LOCATION_SERVICE);
    return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

ম্যানিফেস্ট ফাইলটিতে অনুমতি সহ:

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

6

এটি যদি শর্তাদি সহজেই অবস্থানের পরিষেবাগুলি আমার মতে পাওয়া যায় কিনা তা পরীক্ষা করে:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        //All location services are disabled

}

4

আমি NETWORK_PROVIDER এর জন্য এই জাতীয় উপায়ে ব্যবহার করি তবে আপনি জিপিএস এবং যোগ করতে পারেন ।

LocationManager locationManager;

ইন onCreate আমি রেখেছি

   isLocationEnabled();
   if(!isLocationEnabled()) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.network_not_enabled)
                .setMessage(R.string.open_location_settings)
                .setPositiveButton(R.string.yes,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                            }
                        })
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = builder.create();
        alert.show();
    } 

এবং পরীক্ষা করার পদ্ধতি

protected boolean isLocationEnabled(){
    String le = Context.LOCATION_SERVICE;
    locationManager = (LocationManager) getSystemService(le);
    if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        return false;
    } else {
        return true;
    }
}

2
অন্যথায় যদি আপনার প্রয়োজন হয় না, আপনি কেবল ফিরে আসতে পারেনlocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
লেডিউইডি

4

এটি একটি খুব কার্যকর পদ্ধতি যা সক্ষম করা থাকলে " true" ফিরিয়ে দেয় Location services:

public static boolean locationServicesEnabled(Context context) {
        LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean gps_enabled = false;
        boolean net_enabled = false;

        try {
            gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
        } catch (Exception ex) {
            Log.e(TAG,"Exception gps_enabled");
        }

        try {
            net_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        } catch (Exception ex) {
            Log.e(TAG,"Exception network_enabled");
        }
        return gps_enabled || net_enabled;
}

3

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

private void checkGPSStatus() {
    LocationManager locationManager = null;
    boolean gps_enabled = false;
    boolean network_enabled = false;
    if ( locationManager == null ) {
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    }
    try {
        gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex){}
    try {
        network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex){}
    if ( !gps_enabled && !network_enabled ){
        AlertDialog.Builder dialog = new AlertDialog.Builder(MyActivity.this);
        dialog.setMessage("GPS not enabled");
        dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                //this will navigate user to the device location settings screen
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        });
        AlertDialog alert = dialog.create();
        alert.show();
    }
}

3

কোটলিনের জন্য

 private fun isLocationEnabled(mContext: Context): Boolean {
    val lm = mContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return lm.isProviderEnabled(LocationManager.GPS_PROVIDER) || lm.isProviderEnabled(
            LocationManager.NETWORK_PROVIDER)
 }

কথোপকথন

private fun showLocationIsDisabledAlert() {
    alert("We can't show your position because you generally disabled the location service for your device.") {
        yesButton {
        }
        neutralPressed("Settings") {
            startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
        }
    }.show()
}

এই মত কল

 if (!isLocationEnabled(this.context)) {
        showLocationIsDisabledAlert()
 }

ইঙ্গিত: ডায়ালগটির জন্য নিম্নলিখিত আমদানিগুলি প্রয়োজন (অ্যান্ড্রয়েড স্টুডিওটি এটি আপনার জন্য পরিচালনা করা উচিত)

import org.jetbrains.anko.alert
import org.jetbrains.anko.noButton

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

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

2

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

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

আপনার যদি আরও তথ্যের প্রয়োজন হয় তবে অবস্থানের জিজ্ঞাসা ক্লাসটি পরীক্ষা করুন ।


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

ওহে! আপনার অনেক প্রশ্ন আছে, আমি কি মন্তব্যে উত্তর দিতে পারি না। দয়া করে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন যাতে আমি আরও সরকারীভাবে এর উত্তর দিতে পারি!
bendaf

আমি আমার প্রশ্নটি এখানে পোস্ট করেছি: stackoverflow.com/questions/39327480/…
চেতনা

2

আমি প্রথম কোডটি ব্যবহার পদ্ধতিটি ব্যবহারের পদ্ধতিটি লোকেশনএইনেবলড

 private LocationManager locationManager ;

protected boolean isLocationEnabled(){
        String le = Context.LOCATION_SERVICE;
        locationManager = (LocationManager) getSystemService(le);
        if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
            return false;
        } else {
            return true;
        }
    }

এবং আমি শর্তটি পরীক্ষা করে দেখি যদি টুপিটি মানচিত্রটি খোলায় এবং মিথ্যা অভিপ্রায় দেয় ACTION_LOCATION_SOURCE_SETTINGS

    if (isLocationEnabled()) {
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        locationClient = getFusedLocationProviderClient(this);
        locationClient.getLastLocation()
                .addOnSuccessListener(new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        // GPS location can be null if GPS is switched off
                        if (location != null) {
                            onLocationChanged(location);

                            Log.e("location", String.valueOf(location.getLongitude()));
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.e("MapDemoActivity", e.toString());
                        e.printStackTrace();
                    }
                });


        startLocationUpdates();

    }
    else {
        new AlertDialog.Builder(this)
                .setTitle("Please activate location")
                .setMessage("Click ok to goto settings else exit.")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        startActivity(intent);
                    }
                })
                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        System.exit(0);
                    }
                })
                .show();
    }

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


1

সহজ উপায়ে করতে পারেন

private boolean isLocationEnabled(Context context){
int mode =Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                        Settings.Secure.LOCATION_MODE_OFF);
                final boolean enabled = (mode != android.provider.Settings.Secure.LOCATION_MODE_OFF);
return enabled;
}

1

আপনি যদি অ্যান্ড্রয়েডএক্স ব্যবহার করে থাকেন তবে অবস্থান পরিষেবাটি সক্ষম আছে কিনা তা পরীক্ষা করতে নীচের কোডটি ব্যবহার করুন:

fun isNetworkServiceEnabled(context: Context) = LocationManagerCompat.isLocationEnabled(context.getSystemService(LocationManager::class.java))

0

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


0
private boolean isGpsEnabled()
{
    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
    return service.isProviderEnabled(LocationManager.GPS_PROVIDER)&&service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}

0
    LocationManager lm = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    boolean gps_enabled = false;
    boolean network_enabled = false;

    try {
        gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch(Exception e){
         e.printStackTrace();
    }

    try {
        network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch(Exception e){
         e.printStackTrace();
    }

    if(!gps_enabled && !network_enabled) {
        // notify user
        new AlertDialog.Builder(this)
                .setMessage("Please turn on Location to continue")
                .setPositiveButton("Open Location Settings", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                        startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                    }

                }).
                setNegativeButton("Cancel",null)
                .show();
    }

0
public class LocationUtil {
private static final String TAG = LocationUtil.class.getSimpleName();

public static LocationManager getLocationManager(final Context context) {
    return (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}

public static boolean isNetworkProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}

public static boolean isGpsProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.GPS_PROVIDER);
}

// Returns true even if the location services are disabled. Do not use this method to detect location services are enabled.
private static boolean isPassiveProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.PASSIVE_PROVIDER);
}

public static boolean isLocationModeOn(final Context context) throws Exception {
    int locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
    return locationMode != Settings.Secure.LOCATION_MODE_OFF;
}

public static boolean isLocationEnabled(final Context context) {
    try {
        return isNetworkProviderEnabled(context) || isGpsProviderEnabled(context)  || isLocationModeOn(context);
    } catch (Exception e) {
        Log.e(TAG, "[isLocationEnabled] error:", e);
    }
    return false;
}

public static void gotoLocationSettings(final Activity activity, final int requestCode) {
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    activity.startActivityForResult(intent, requestCode);
}

public static String getEnabledProvidersLogMessage(final Context context){
    try{
        return "[getEnabledProvidersLogMessage] isNetworkProviderEnabled:"+isNetworkProviderEnabled(context) +
                ", isGpsProviderEnabled:" + isGpsProviderEnabled(context) +
                ", isLocationModeOn:" + isLocationModeOn(context) +
                ", isPassiveProviderEnabled(ignored):" + isPassiveProviderEnabled(context);
    }catch (Exception e){
        Log.e(TAG, "[getEnabledProvidersLogMessage] error:", e);
        return "provider error";
    }
}

}

অবস্থান পরিষেবাদি সক্ষম হয়েছে তা সনাক্ত করতে isLocationEnabled পদ্ধতিটি ব্যবহার করুন।

https://github.com/Polidea/RxAndroidBle/issues/327# পৃষ্ঠা কেন প্যাসিভ সরবরাহকারী ব্যবহার করবেন না তার পরিবর্তে লোকেশন মোড ব্যবহার করবেন এমন আরও তথ্য দেবে।

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