如何根据GPS位置或国家/地区代码获取货币符号 [英] How to get a Currency symbol based on GPS location or Country code

查看:146
本文介绍了如何根据GPS位置或国家/地区代码获取货币符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实施了一个小型项目,在那里我需要根据位置显示货币符号.例如:如果我在印度,如果使用美国$符号,则应该显示卢比符号,我已经实现了,但它始终会给出英镑符号

I have implemented a mini project and there i need to display currency symbol based on Location. ex: If i am in India it should display rupee symbol if USA $ symbol, I have implemented but it always gives Pound symbol

我的代码:

LocationManager locationManager = (LocationManager) getSystemService(ListActivity.LOCATION_SERVICE);
Location loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

if (loc != null) {
    Geocoder code = new Geocoder(ListActivity.this);
    try {
        List<Address> addresses = code.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);
        Address obj = addresses.get(0);
        String cc = Currency.getInstance(obj.getLocale()).getSymbol();

        Log.d("Currency Symbol : ", cc);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

推荐答案


我需要显示相应国家/地区的货币符号,并从GPS中获取国家/地区,我搜索了很多东西,最后想出了下面的代码,它可以正常工作,所以我想分享这个代码,其他人不能在那儿浪费时间


I needed to show currency symbol of respective country and get country are from GPS i searched lot finally came up with below code its working properly so i want to share this code others could not waste there time

在这里您需要从纬度经度开始的第一个国家代码,例如IN,US,我们将获得完整的地址

here you need first country code like IN,US from latitude longitude we get full address

请在运行代码之前检查清单文件中的GPS权限.以下是一些权限

Please check GPS permission in manifest file before run code. below are the some permissions

需要GPSTracker.java文件代码创建GPSTracker Java文件并编写以下代码.在这条红线中不要担心它不会影响

need GPSTracker.java file code create GPSTracker java file and write below code. in this some red line dont worry it affect nothing

public class GPSTracker extends Service implements LocationListener {

    private final Context mContext;

    // Flag for GPS status
    boolean isGPSEnabled = false;

    // Flag for network status
    boolean isNetworkEnabled = false;

    // Flag for GPS status
    boolean canGetLocation = false;

    Location location; // Location
    double latitude; // Latitude
    double longitude; // Longitude

    // The minimum distance to change Updates in meters
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

    // The minimum time between updates in milliseconds
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

    // Declaring a Location Manager
    protected LocationManager locationManager;

    public GPSTracker(Context context) {
        this.mContext = context;
        getLocation();
    }

    public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext
                .getSystemService(LOCATION_SERVICE);

            // Getting GPS status
            isGPSEnabled = locationManager
                .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // Getting network status
            isNetworkEnabled = locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // No network provider is enabled
            } else {
                this.canGetLocation = true;

                if (isNetworkEnabled) {

                    locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("Network", "Network");
                    if (locationManager != null) {
                        location = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // If GPS enabled, get latitude/longitude using GPS Services
                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return location;
    }


    /**
     * Stop using GPS listener
     * Calling this function will stop using GPS in your app.
     * */
    public void stopUsingGPS() {
        if (locationManager != null) {
            //locationManager.removeUpdates(GPSTracker.this);
        }
    }


    /**
     * Function to get latitude
     * */
    public double getLatitude() {
        if (location != null) {
            latitude = location.getLatitude();
        }

        // return latitude
        return latitude;
    }


    /**
     * Function to get longitude
     * */
    public double getLongitude() {
        if (location != null) {
            longitude = location.getLongitude();
        }

        // return longitude
        return longitude;
    }

    /**
     * Function to check GPS/Wi-Fi enabled
     * @return boolean
     * */
    public boolean canGetLocation() {
        return this.canGetLocation;
    }


    /**
     * Function to show settings alert dialog.
     * On pressing the Settings button it will launch Settings Options.
     * */
    public void showSettingsAlert() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

        // Setting Dialog Title
        alertDialog.setTitle("GPS is settings");

        // Setting Dialog Message
        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

        // On pressing the Settings button.
        alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                mContext.startActivity(intent);
            }
        });

        // On pressing the cancel button
        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        // Showing Alert Message
        alertDialog.show();
    }


    @
    Override
    public void onLocationChanged(Location location) {}


    @
    Override
    public void onProviderDisabled(String provider) {}


    @
    Override
    public void onProviderEnabled(String provider) {}


    @
    Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}


    @
    Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}


这是mainactivity.java类

public class MainActivity extends AppCompatActivity {

    public static SortedMap < Currency, Locale > currencyLocaleMap;
    TextView t;
    Geocoder geocoder;
    private static final Map < String, Locale > COUNTRY_TO_LOCALE_MAP = new HashMap < String, Locale > ();
    static {
        Locale[] locales = Locale.getAvailableLocales();
        for (Locale l: locales) {
            COUNTRY_TO_LOCALE_MAP.put(l.getCountry(), l);
        }
    }
    public static Locale getLocaleFromCountry(String country) {
        return COUNTRY_TO_LOCALE_MAP.get(country);
    }

    String Currencysymbol = "";

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

        t = (TextView) findViewById(R.id.text);

        GPSTracker gpsTracker = new GPSTracker(MainActivity.this);
        geocoder = new Geocoder(MainActivity.this, getLocaleFromCountry(""));
        double lat = gpsTracker.getLatitude();
        double lng = gpsTracker.getLongitude();

        Log.e("Lat long ", lng + "lat long check" + lat);


        currencyLocaleMap = new TreeMap < Currency, Locale > (new Comparator < Currency > () {
              public int compare(Currency c1, Currency c2) {
                  return c1.getCurrencyCode().compareTo(c2.getCurrencyCode());
              }
          });

          for (Locale locale: Locale.getAvailableLocales()) {
              try {
                  Currency currency = Currency.getInstance(locale);
                  currencyLocaleMap.put(currency, locale);

                  Log.d("locale utill", currency + " locale1 " + locale.getCountry());

              } catch (Exception e) {

                  Log.d("locale utill", "e" + e);
              }
          }


          try {

              List < Address > addresses = geocoder.getFromLocation(lat, lng, 2);
              Address obj = addresses.get(0);
              Currencysymbol = getCurrencyCode(obj.getCountryCode());

              Log.e("getCountryCode", "Exception address " + obj.getCountryCode());
              Log.e("Currencysymbol", "Exception address " + Currencysymbol);

          } catch (Exception e) {
              Log.e("Exception address", "Exception address" + e);
              // Log.e("Currencysymbol","Exception address"+Currencysymbol);
        }
        t.setText(Currencysymbol);
    }

    public String getCurrencyCode(String countryCode) {

        String s = "";
        for (Locale locale: Locale.getAvailableLocales()) {
            try {

                if (locale.getCountry().equals(countryCode)) {

                    Currency currency = Currency.getInstance(locale);
                    currencyLocaleMap.put(currency, locale);
                    Log.d("locale utill", currency + " locale1 " + locale.getCountry() + "s " + s);
                    s = getCurrencySymbol(currency + "");
                }
            } catch (Exception e) {
                Log.d("locale utill", "e" + e);
            }
        }
        return s;
    }

    public String getCurrencySymbol(String currencyCode) {
        Currency currency = Currency.getInstance(currencyCode);
        System.out.println(currencyCode + ":-" + currency.getSymbol(currencyLocaleMap.get(currency)));
        return currency.getSymbol(currencyLocaleMap.get(currency));
    }
  }

这篇关于如何根据GPS位置或国家/地区代码获取货币符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆