13

我是 android 应用程序的新开发人员。当我通过带有国家代码的手机号码时,我想获得 ISO 国家代码。如果我将手机号码作为 1-319-491-6338 传递,我可以在 android 中获得美国/美国的国家 ISO 代码吗?

我编写的代码如下:

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

在这里,我在哪里可以传递手机号码?

有人可以帮我吗?

提前致谢

4

3 回答 3

8

您可能无法通过标准 API 以编程方式查询国家/地区代码,但您可以在应用程序中包含一个表格。通过谷歌很容易找到这样的表格(例如http://countrycode.org/)。

危险威尔罗宾逊!: 但是,应该问自己要回答什么问题。您的问题中隐含的假设是国际拨号代码和 ISO 国家代码之间存在一对一映射。这不是真的。例如,美国和加拿大都有国际拨号代码“1”。

也许考虑重新构建应用程序的界面。允许用户选择一个国家与电话号码相关联,但使用http://countrycode.org/中的表格将最有可能的候选人排序在顶部?

于 2011-06-22T12:02:35.287 回答
3

有同样的问题。最终我将所有数据放入excel并阅读了excel表。这是实现:

  1. 将国家代码表从http://countrycode.org/复制到 Microsoft Excel 文件。
  2. 在 \res\raw\countrycode_org.xls 中将 Excel 文件另存为 97-2003 兼容 (.xls)
  3. 这里下载JExcelApi
  4. 使用以下类读取文件:

    公共类 CountryCodes { 私有 HashMap mCountryByName = new HashMap(); 私有 HashMap mCountryByCode = new HashMap();; 私有 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;
    
    }
    

    }

于 2012-03-13T09:02:17.380 回答
2

步骤 1 您可以在以下 URL http://en.wikipedia.org/wiki/List_of_country_calling_codescountry calling code中获得它ISO name

或者

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

步骤 2您可以使用 java 程序获取该文件的页面源。您将获得 HTML 格式的文件

第 3 步,您可以使用任何可用的解析器将这些 HTML 文件转换为 XML 格式。请参阅Java 中的开源 HTML 解析器

Step-4形成电话号码,您可以获得呼叫代码。例如,如果号码为“1-319-491-6338”,则呼叫代码为 1

步骤 5将此调用代码与您从 XML 解析器获得的调用代码和国家/地区名称列表进行匹配。这样就可以获得iso国家

于 2011-06-29T07:06:10.387 回答