Как получить код страны ISO в приложениях для Android?
Я новый разработчик приложения для Android. Я хотел бы получить код страны ISO, когда я передаю номер мобильного телефона с кодом страны. Если я передам номер мобильного телефона как 1-319-491-6338, могу ли я получить код страны ISO как US/USA в android?
Я написал код следующим образом:
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String countryCode = tm.getSimCountryIso();
String mobileno="1-319-491-6338";
Здесь, где я могу передать номер мобильного телефона?
Кто-нибудь может мне помочь?
Заранее спасибо
Ответы
Ответ 1
Вы не сможете запрограммировать код страны программным путем с помощью стандартного API, но вы можете включить таблицу в свое приложение. Такая таблица легко найти через Google (например, http://countrycode.org/).
Опасность будет Робинсоном!. Однако следует спросить себя, на какой вопрос вы пытаетесь ответить. Неявным в вашем вопросе является предположение о наличии взаимно однозначного соответствия между международными кодами набора и кодами стран ISO. Это не true. Например, как США, так и Канада имеют международный код набора "1".
Возможно, подумайте о реструктуризации вашего интерфейса приложения. Разрешить пользователю выбирать страну для связи с номером телефона, но использовать таблицу из http://countrycode.org/ для заказа наиболее вероятных кандидатов вверху?
Ответ 2
Шаг 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
Шаг-4. Составьте номер телефона, который вы можете получить при вызове кода. Например, если число "1-319-491-6338", то код вызова равен 1
Шаг-5. Сопоставьте этот код вызова с вызывающим кодом и списком имен стран, который вы получили от синтаксического анализа XML. Таким образом, вы можете получить страну iso
Ответ 3
Была та же проблема. В конце концов я поместил все данные в excel и прочитал лист excel.
Вот реализация:
- скопируйте таблицу кода страны из http://countrycode.org/ в файл Microsoft Excel.
- Сохраните файл Excel как совместимый с 97-2003 (.xls) в \res\raw\countrycode_org.xls
- Загрузите JExcelApi из здесь
-
Используйте следующий класс для чтения файла:
открытый класс 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;
}
}