Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android应用程序中获取ISO国家代码?_Android_Mobile_Code Generation_Country - Fatal编程技术网

如何在android应用程序中获取ISO国家代码?

如何在android应用程序中获取ISO国家代码?,android,mobile,code-generation,country,Android,Mobile,Code Generation,Country,我是android应用程序的新开发人员。当我传递带有国家代码的手机号码时,我想获得ISO国家代码。如果我通过手机号码1-319-491-6338,我可以在android中获得美国/美国的国家ISO代码吗 我将代码编写如下: TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String countryCode = tm.getSimCountryIso(

我是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";
这里,我在哪里可以传递手机号码

谁能帮帮我吗


提前感谢

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

危险将会降临,罗宾逊:然而,你应该问问自己你想回答什么问题。您的问题中隐含的假设是,国际拨号代码和ISO国家代码之间存在一对一的映射。这是不正确的。例如,美国和加拿大都有国际拨号代码“1”

也许可以考虑重新构建应用程序的界面。允许用户选择与电话号码关联的国家/地区,但使用表中的“从”可在顶部排序最有可能的候选人?

步骤1 您可以在下面的URL中获得
国家/地区呼叫代码
及其
ISO名称

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

步骤3您可以使用任何可用的解析器将这些HTML文件转换为XML格式。看

第4步从电话号码中提取通话代码。例如,如果号码为“1-319-491-6338”,则呼叫代码为1


步骤5将此调用代码与从XML解析器获得的调用代码和国家名称列表进行匹配。通过这种方式,您可以了解iso国家/地区是否存在相同的问题。最后,我把所有的数据放在excel中,并阅读excel表格。 以下是实施方案:

  • 将国家代码表从复制到Microsoft Excel文件
  • 在\res\raw\countrycode\u org.xls中将Excel文件另存为97-2003兼容(.xls)
  • 下载自
  • 使用以下类读取文件:

    公共类国家代码{ 私有HashMap mCountryByName=新HashMap(); 私有HashMap mCountryByCode=newhashmap();; private ArrayList mccountries=new ArrayList()

    public void addCountry(字符串countryName、字符串ISO_code、字符串countryCode){
    countryCode=电话号码rutil.normalizedGits(countryCode);
    国家=新国家();
    country.Name=countryName;
    country.Code=countryCode;
    country.ISO_code=ISO_code;
    mccountrybyname.put(countryName,country);
    mccountrybycode.put(国家代码,国家);
    mccountries.add(国家);
    返回;
    }
    公共国家/地区getCountryByCode(字符串countryCode){
    countryCode=电话号码rutil.normalizedGits(countryCode);
    返回mCountryByCode.get(countryCode);
    }
    公共国家/地区getCountryByName(字符串countryName){
    返回mCountryByName.get(countryName);
    }
    公共国家/地区getCountryByIsoCode(字符串ISO_代码){
    ISO_code=ISO_code.toUpperCase();
    适用于(国家:百万国家){
    字符串[]strArr=country.ISO_code.split(“/|”);
    用于(字符串s:strArr){
    if(ISO_代码等于)
    返回国;
    }
    }
    返回null;
    }
    公共字符串[]getCountryNamesList(){
    String[]res=新字符串[mccountries.size()];
    int i=0;
    适用于(c国:M国){
    res[i]=c.名称;
    i++;
    }
    返回res;
    }
    public void readCountryCodesFromExcelWorkbook()
    {
    Context Context=GlobalData.getInstance().getApp();
    工作手册;
    InputStream myRawResource=context.getResources().openRawResource(R.raw.countrycode_org);
    如果(myRawResource==null)
    Toast.makeText(上下文,“未找到XML文件”,Toast.LENGTH_LONG.show();
    其他的
    试一试{
    WorkbookSettings ws=新的WorkbookSettings();
    ws.setEncoding(“Cp1252”);
    mWorkbook=Workbook.getWorkbook(myRawResource);
    //ArrayList currentSheet=新的ArrayList();
    Sheet Sheet=mWorkbook.getSheet(0);
    int rowsNum=sheet.getRows();
    对于(int-rowNum=1;rowNum
    }


  • 这可能不像你想象的那么简单。请查看此网站:。他们列出了至少两个电话号码为
    1
    的国家/地区。在这种情况下,您将如何决定使用哪一种呢?String countryCode=tm.getSimCountryIso();这一行本身给出的ISO代码与我们相同
    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;
    
    }