2011-06-22 1273 views
12

Soy un nuevo desarrollador de aplicaciones para Android. Me gustaría obtener el código de país ISO cuando paso el número de móvil con el código de país. Si paso el número de móvil como 1-319-491-6338, ¿puedo obtener el código ISO del país como US/USA en android?¿Cómo obtener el código de país ISO en aplicaciones de Android?

he escrito el código de la siguiente manera:

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

Aquí, donde puedo pasar el número de móvil?

¿Alguien puede ayudarme?

Gracias de antemano

+0

Puede que no sea tan simple como parece. Eche un vistazo a este sitio: http://countrycode.org/. Están enumerando al menos 2 países diferentes con el código de teléfono '1'. ¿Cómo decidirías cuál en este caso? – bdares

+1

Cadena countryCode = tm.getSimCountryIso(); esta línea proporciona el código ISO como US – ingsaurabh

Respuesta

7

Usted puede no ser capaz de consultar el código de país mediante programación a través de la API estándar, pero que podrían incluir una tabla en su aplicación. Dicha tabla se encuentra fácilmente a través de Google (por ejemplo, http://countrycode.org/).

Peligro Will Robinson!: Sin embargo, uno debe preguntarse qué pregunta está tratando de responder. Implícita en su pregunta está esa suposición de que existe un mapeo uno a uno entre los códigos de marcación internacional y los códigos de país ISO. Esto es no cierto. Por ejemplo, tanto EE. UU. Como Canadá tienen el código de marcación internacional '1'.

Quizás pienses en reestructurar la interfaz de tu aplicación. Permitir al usuario seleccionar un país para asociarlo con el número de teléfono, pero use la tabla del http://countrycode.org/ para pedir los candidatos más probables en la parte superior.

2

Paso-1 Puede obtener country calling code así como su ISO name en el siguiente URL http://en.wikipedia.org/wiki/List_of_country_calling_codes

o

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

Paso-2 Puede obtener fuente de la página de ese archivo usando el programa java. Obtendrá el archivo en formato HTMl

Paso-3 puede convertir esos archivos HTML en formato XML utilizando cualquiera de los analizadores disponibles. ver Open Source HTML Parsers in Java

Paso-4 Para obtener el número de teléfono, puede obtener el código de llamada. Ejemplo si el número es "1-319-491-6338", entonces el código de llamada es 1

Paso-5 Haga coincidir este código de llamada con el código de llamada y la lista de nombres de país que obtuvo del analizador XML. De esta forma puede obtener el país iso

2

Tenía el mismo problema. Finalmente coloco todos los datos en Excel y leo la hoja de Excel. Aquí es la implementación:

  1. copia más allá de la tabla de códigos de país de http://countrycode.org/ de archivo de Microsoft Excel.
  2. Guarde el archivo de Excel como compatible con 97-2003 (.xls) en \ res \ raw \ countrycode_org.xls
  3. Descargar JExcelApi de here
  4. Utilice la siguiente clase para leer el archivo:

    CountryCodes clase pública { privada HashMap mCountryByName = new HashMap(); private HashMap mCountryByCode = new HashMap() ;; privado 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; 
    
    } 
    

    }

Cuestiones relacionadas