android - एंड्रॉइड वर्तमान लोकेल प्राप्त करें, डिफ़ॉल्ट नहीं





locale (5)


एंड्रॉइड एन (एपीआई स्तर 24) अद्यतन (कोई चेतावनी नहीं):

   Locale getCurrentLocale(Context context){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            return context.getResources().getConfiguration().getLocales().get(0);
        } else{
            //noinspection deprecation
            return context.getResources().getConfiguration().locale;
        }
    }

मैं एंड्रॉइड में उपयोगकर्ता का वर्तमान लोकेल कैसे प्राप्त करूं?

मैं डिफ़ॉल्ट प्राप्त कर सकता हूं, लेकिन यह वर्तमान में सही नहीं हो सकता है?

असल में मैं वर्तमान लोकेल से दो अक्षर भाषा कोड चाहता हूं। डिफ़ॉल्ट नहीं है। कोई Locale.current()




यदि आप एंड्रॉइड सपोर्ट लाइब्रेरी का उपयोग कर रहे हैं तो आप डिस्प्ले चेतावनियों से छुटकारा पाने के लिए @ मकाले के तरीके के बजाय ConfigurationCompat कॉम्पैक्ट का उपयोग कर सकते हैं:

Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);

या कोटलिन में:

val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]



डिफ़ॉल्ट Locale सिस्टम प्रॉपर्टी सेटिंग्स से आपकी एप्लिकेशन प्रक्रिया के लिए रनटाइम पर स्थिर रूप से बनाया गया है, इसलिए यह उस डिवाइस पर चुने गए Locale प्रतिनिधित्व करेगा जब एप्लिकेशन लॉन्च किया गया था । आम तौर पर, यह ठीक है, लेकिन इसका मतलब यह है कि यदि उपयोगकर्ता आपकी एप्लिकेशन प्रक्रिया चलने के बाद सेटिंग्स में अपनी Locale बदलता है, तो getDefaultLocale() का मान तुरंत अपडेट नहीं किया जाएगा।

यदि आपको अपने आवेदन में किसी कारण से इस तरह की घटनाओं को फँसाने की ज़रूरत है, तो आप संसाधन Configuration ऑब्जेक्ट से उपलब्ध Locale प्राप्त करने का प्रयास कर सकते हैं, यानी

Locale current = getResources().getConfiguration().locale;

यदि आप अपने आवेदन के लिए जरूरी हैं तो सेटिंग बदलने के बाद आप यह मान अधिक तेज़ी से अपडेट हो सकते हैं।




getDefault के दस्तावेज़ से:

उपयोगकर्ता के पसंदीदा लोकेल देता है। यह सेटडिफॉल्ट (लोकेल) के साथ इस प्रक्रिया के लिए ओवरराइड हो सकता है।

Locale डॉक्स से भी:

डिफ़ॉल्ट लोकेल उन कार्यों के लिए उपयुक्त है जिनमें उपयोगकर्ता को डेटा प्रस्तुत करना शामिल है।

ऐसा लगता है कि आपको इसका इस्तेमाल करना चाहिए।




मैंने demonuts.com पर वर्तमान स्थान को कवर करने वाले विस्तृत ट्यूटोरियल लिखे हैं। आप यहां अधिक विवरण प्राप्त कर सकते हैं और आप बेहतर समझने के लिए पूरे डेमो स्रोत कोड डाउनलोड भी कर सकते हैं।

वहां पहले से ही कई उत्तर हैं लेकिन मैं Google API का उपयोग करके स्थान प्राप्त करने का नवीनतम तरीका दिखाना चाहता हूं, इसलिए नए प्रोग्रामर नई विधि का उपयोग कर सकते हैं:

सबसे पहले, इसे gradle फ़ाइल में डाल दें

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

फिर आवश्यक इंटरफेस लागू करें

public class MainActivity  extends BaseActivitiy implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener

उदाहरण घोषित करें

  private GoogleApiClient mGoogleApiClient;
  private Location mLocation;
  private LocationManager locationManager;
  private LocationRequest mLocationRequest;

इसे onCreate()

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

अंत में, आवश्यक तरीकों को ओवरराइड करें

 @Override
    public void onConnected(Bundle bundle) {
        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;
        }
        mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        if(mLocation == null){
            startLocationUpdates();
        }
        if (mLocation != null) {
            double latitude = mLocation.getLatitude();
            double longitude = mLocation.getLongitude();
        } else {
            // Toast.makeText(this, "Location not Detected", Toast.LENGTH_SHORT).show();
        }
    }

    protected void startLocationUpdates() {
        // Create the location request
        mLocationRequest = LocationRequest.create()
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                .setInterval(UPDATE_INTERVAL)
                .setFastestInterval(FASTEST_INTERVAL);
        // Request location updates
        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;
        }
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
                mLocationRequest, this);
        Log.d("reque", "--->>>>");
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.i(TAG, "Connection Suspended");
        mGoogleApiClient.connect();
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.i(TAG, "Connection failed. Error: " + connectionResult.getErrorCode());
    }

    @Override
    public void onStart() {
        super.onStart();
        mGoogleApiClient.connect();
    }

    @Override
    public void onStop() {
        super.onStop();
        if (mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
    }
    @Override
    public void onLocationChanged(Location location) {

    }

ऐप चलाने से पहले अपने डिवाइस में जीपीएस शुरू करना न भूलें।





android locale