Как получить код страны ISO в приложениях для Android? - PullRequest
12 голосов
/ 22 июня 2011

Я новый разработчик приложений для Android.Я хотел бы получить код страны ISO, когда я передаю номер мобильного телефона с кодом страны.Если я передаю номер мобильного телефона как 1-319-491-6338, могу ли я получить код ISO страны как США / США в Android?

Я написал код следующим образом:

      TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
      String countryCode = tm.getSimCountryIso();
      String mobileno="1-319-491-6338";

Здесь, где я могу передать номер мобильного телефона?

Может кто-нибудь помочь мне?

Заранее спасибо

Ответы [ 3 ]

7 голосов
/ 22 июня 2011

Возможно, вам не удастся программно запросить код страны через стандартный API, но вы можете включить таблицу в свое приложение. Такую таблицу легко найти через Google (например, http://countrycode.org/).

Опасность Уилл Робинсон! : Однако нужно задать себе вопрос, на какой вопрос вы пытаетесь ответить. В вашем вопросе подразумевается, что между международными телефонными кодами и кодами стран ИСО существует взаимно-однозначное сопоставление. Это не правда. Например, и США, и Канада имеют международный телефонный код «1».

Возможно, подумайте о реструктуризации интерфейса вашего приложения. Разрешить пользователю выбирать страну, которая будет ассоциироваться с номером телефона, но использовать таблицу из http://countrycode.org/, чтобы упорядочить наиболее вероятных кандидатов вверху?

2 голосов
/ 13 марта 2012

Была такая же проблема.В конце концов я положил все данные в Excel и прочитал лист Excel.Вот реализация:

  1. скопировать таблицу кодов стран из http://countrycode.org/ в файл Microsoft Excel.
  2. Сохранить файл Excel как 97-2003-совместимый (.xls) in \ res \ raw \ countrycode_org.xls
  3. Скачать JExcelApi здесь здесь
  4. Используйте следующий класс для чтения файла:

    открытый класс CountryCodes {private HashMap mCountryByName = new HashMap ();private HashMap mCountryByCode = new HashMap () ;;private ArrayList mCountries = new ArrayList ();

    public void addCountry(String countryName,String ISO_code,String countryCode){
        countryCode = PhoneNumberUtil.normalizeDigitsOnly(countryCode);
        Country country = new Country();
        country.Name = countryName;
        country.Code = countryCode;
        country.ISO_code = ISO_code;
        mCountryByName.put(countryName, country);
        mCountryByCode.put(countryCode, country);
        mCountries.add(country);
    
        return;
    }
    
    public Country getCountryByCode(String countryCode){
        countryCode = PhoneNumberUtil.normalizeDigitsOnly(countryCode);
        return mCountryByCode.get(countryCode);
    }
    
    public Country getCountryByName(String countryName){
        return mCountryByName.get(countryName);
    }
    
    public Country getCountryByIsoCode(String ISO_code){
        ISO_code = ISO_code.toUpperCase();
        for (Country country:mCountries){
            String [] strArr = country.ISO_code.split("/| ");
            for (String s:strArr){
                if (ISO_code.equals(s))
                    return country;
            }
        }
        return null;
    }
    
    
    
    public  String[] getCountryNamesList(){
        String[] res = new String [mCountries.size()];
        int i=0;
        for (Country c:mCountries){
            res[i] = c.Name;
            i++;
        }
        return res;
    }
    
    
    
    public void readCountryCodesFromExcelWorkbook()
    {
        Context context = GlobalData.getInstance().getApp();
        Workbook mWorkbook;
        InputStream myRawResource = context.getResources().openRawResource(R.raw.countrycode_org);
        if (myRawResource == null)
            Toast.makeText(context,"XML file not found",Toast.LENGTH_LONG).show();
        else
            try {
                WorkbookSettings ws = new WorkbookSettings();
                ws.setEncoding("Cp1252");
    
                mWorkbook = Workbook.getWorkbook(myRawResource);
                    //ArrayList<String[]> currentSheet = new ArrayList<String[]>();
                    Sheet sheet = mWorkbook.getSheet(0);
    
                    int rowsNum = sheet.getRows();
                    for (int rowNum = 1; rowNum < rowsNum; rowNum++) {
                        //Log.d("RowNum", ""+rowNum);
                        int colsNum = sheet.getColumns();
                        String[] strArr = new String[colsNum];
                        boolean rowIsFull = true;
                        for (int colNum = 0; colNum < colsNum; colNum++) {
                            strArr[colNum] = sheet.getCell(colNum, rowNum).getContents();
                            if (strArr[colNum].length() == 0)
                                rowIsFull = false;
                        }
                        if (rowIsFull)
                            addCountry(strArr[0],strArr[1],strArr[2]);
                    }
    
    
            } catch (BiffException e) {
                Toast.makeText(context,"Error Reading xml file: BiffException",Toast.LENGTH_LONG).show();
                e.printStackTrace();
                return ;
            } catch (IOException e) {
                Toast.makeText(context,"Error Reading xml file: IOException",Toast.LENGTH_LONG).show();
                e.printStackTrace();
                return ;
            }
    }
    
    
    public Country[] getCountries(){
        return mCountries.toArray(new Country[0]);
    }
    
    
    
    public class Country {
        public String Name;
        public String Code;
        public String ISO_code;
    
    }
    

    } ​​

2 голосов
/ 29 июня 2011

Шаг-1 Вы можете получить country calling code, а также ISO name по следующему URL http://en.wikipedia.org/wiki/List_of_country_calling_codes

или

http://www.unc.edu/~rowlett/units/codes/country.htm

Шаг-2 Вы можете получить исходный код этого файла, используя программу Java.Вы получите файл в формате HTMl

Шаг-3 , вы можете конвертировать эти HTML-файлы в формат XML с помощью любого из доступных анализаторов.см. парсеры HTML с открытым исходным кодом в Java

Step-4 Сформируйте номер телефона, по которому можно получить код вызова.Например, если номер «1-319-491-6338», то код вызова: 1

Step-5 Сравните этот код вызова с кодом вызова и списком названий стран, которые вы получили.из парсера XML.Таким образом, вы можете получить ISO страны

...