我是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";
在这里,我可以在哪里传递手机号码?
有人可以帮助我吗?
提前致谢
答案 0 :(得分:7)
您可能无法通过标准API以编程方式查询国家/地区代码,但您可以在应用中添加一个表格。通过Google可以轻松找到这样的表格(例如http://countrycode.org/)。
危险威尔罗宾逊!:但是,你应该问问自己,你想要回答什么问题。您的问题隐含的假设是国际拨号代码与ISO国家/地区代码之间存在一对一的映射关系。这是不为真。例如,美国和加拿大都有国际拨号代码'1'。
或许考虑重新构建应用的界面。允许用户选择要与电话号码关联的国家/地区,但是使用http://countrycode.org/中的表格来排序最有可能的候选人?
答案 1 :(得分:2)
<强>步骤1 强>
您可以在以下网址中获取country calling code
及其ISO name
http://en.wikipedia.org/wiki/List_of_country_calling_codes
或
http://www.unc.edu/~rowlett/units/codes/country.htm
步骤2 您可以使用java程序获取该文件的页面源。您将获得HTMl格式的文件
Step-3 您可以使用任何可用的解析器将这些HTML文件转换为XML格式。见Open Source HTML Parsers in Java
步骤4 形成您可以获取主叫代码的电话号码。例如,如果数字是“1-319-491-6338”,那么调用代码是1
步骤5 将此调用代码与您从XML解析器获取的调用代码和国家/地区名称列表进行匹配。通过这种方式,您可以获得iso国家
答案 2 :(得分:2)
有同样的问题。最后我将所有数据放在excel中并阅读excel表。 以下是实施:
使用以下类读取文件:
public class 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;
}
}