web-dev-qa-db-fra.com

Obtenir l'indicatif téléphonique local américain avec Android

Je voudrais savoir comment obtenir le code de périphérique/utilisateur à partir de mon Android Je sais qu'il existe une bibliothèque nommée TelephonyManager mais je n'ai pas trouvé la fonction de code de pays

Pour être clair: j'ai une activité qui demande à l'utilisateur d'entrer son numéro de téléphone et je veux que l'indicatif régional soit retiré de l'appareil (de son opérateur?) Si j'ouvre mon application à New York, j'obtiens +212 comme code et une zone de texte pour entrer mon propre numéro

51
IB.

1- Ajouter ce tableau au fichier Strings.xml

<string-array name="CountryCodes" >
<item>93,AF</item>
<item>355,AL</item>
<item>213,DZ</item>
<item>376,AD</item>
<item>244,AO</item>
<item>672,AQ</item>
<item>54,AR</item>
<item>374,AM</item>
<item>297,AW</item>
<item>61,AU</item>
<item>43,AT</item>
<item>994,AZ</item>
<item>973,BH</item>
<item>880,BD</item>
<item>375,BY</item>
<item>32,BE</item>
<item>501,BZ</item>
<item>229,BJ</item>
<item>975,BT</item>
<item>591,BO</item>
<item>387,BA</item>
<item>267,BW</item>
<item>55,BR</item>
<item>673,BN</item>
<item>359,BG</item>
<item>226,BF</item>
<item>95,MM</item>
<item>257,BI</item>
<item>855,KH</item>
<item>237,CM</item>
<item>1,CA</item>
<item>238,CV</item>
<item>236,CF</item>
<item>235,TD</item>
<item>56,CL</item>
<item>86,CN</item>
<item>61,CX</item>
<item>61,CC</item>
<item>57,CO</item>
<item>269,KM</item>
<item>242,CG</item>
<item>243,CD</item>
<item>682,CK</item>
<item>506,CR</item>
<item>385,HR</item>
<item>53,CU</item>
<item>357,CY</item>
<item>420,CZ</item>
<item>45,DK</item>
<item>253,DJ</item>
<item>670,TL</item>
<item>593,EC</item>
<item>20,EG</item>
<item>503,SV</item>
<item>240,GQ</item>
<item>291,ER</item>
<item>372,EE</item>
<item>251,ET</item>
<item>500,FK</item>
<item>298,FO</item>
<item>679,FJ</item>
<item>358,FI</item>
<item>33,FR</item>
<item>689,PF</item>
<item>241,GA</item>
<item>220,GM</item>
<item>995,GE</item>
<item>49,DE</item>
<item>233,GH</item>
<item>350,GI</item>
<item>30,GR</item>
<item>299,GL</item>
<item>502,GT</item>
<item>224,GN</item>
<item>245,GW</item>
<item>592,GY</item>
<item>509,HT</item>
<item>504,HN</item>
<item>852,HK</item>
<item>36,HU</item>
<item>91,IN</item>
<item>62,ID</item>
<item>98,IR</item>
<item>964,IQ</item>
<item>353,IE</item>
<item>44,IM</item>
<item>972,IL</item>
<item>39,IT</item>
<item>225,CI</item>
<item>81,JP</item>
<item>962,JO</item>
<item>7,KZ</item>
<item>254,KE</item>
<item>686,KI</item>
<item>965,KW</item>
<item>996,KG</item>
<item>856,LA</item>
<item>371,LV</item>
<item>961,LB</item>
<item>266,LS</item>
<item>231,LR</item>
<item>218,LY</item>
<item>423,LI</item>
<item>370,LT</item>
<item>352,LU</item>
<item>853,MO</item>
<item>389,MK</item>
<item>261,MG</item>
<item>265,MW</item>
<item>60,MY</item>
<item>960,MV</item>
<item>223,ML</item>
<item>356,MT</item>
<item>692,MH</item>
<item>222,MR</item>
<item>230,MU</item>
<item>262,YT</item>
<item>52,MX</item>
<item>691,FM</item>
<item>373,MD</item>
<item>377,MC</item>
<item>976,MN</item>
<item>382,ME</item>
<item>212,MA</item>
<item>258,MZ</item>
<item>264,NA</item>
<item>674,NR</item>
<item>977,NP</item>
<item>31,NL</item>
<item>599,AN</item>
<item>687,NC</item>
<item>64,NZ</item>
<item>505,NI</item>
<item>227,NE</item>
<item>234,NG</item>
<item>683,NU</item>
<item>850,KP</item>
<item>47,NO</item>
<item>968,OM</item>
<item>92,PK</item>
<item>680,PW</item>
<item>507,PA</item>
<item>675,PG</item>
<item>595,PY</item>
<item>51,PE</item>
<item>63,PH</item>
<item>870,PN</item>
<item>48,PL</item>
<item>351,PT</item>
<item>1,PR</item>
<item>974,QA</item>
<item>40,RO</item>
<item>7,RU</item>
<item>250,RW</item>
<item>590,BL</item>
<item>685,WS</item>
<item>378,SM</item>
<item>239,ST</item>
<item>966,SA</item>
<item>221,SN</item>
<item>381,RS</item>
<item>248,SC</item>
<item>232,SL</item>
<item>65,SG</item>
<item>421,SK</item>
<item>386,SI</item>
<item>677,SB</item>
<item>252,SO</item>
<item>27,ZA</item>
<item>82,KR</item>
<item>34,ES</item>
<item>94,LK</item>
<item>290,SH</item>
<item>508,PM</item>
<item>249,SD</item>
<item>597,SR</item>
<item>268,SZ</item>
<item>46,SE</item>
<item>41,CH</item>
<item>963,SY</item>
<item>886,TW</item>
<item>992,TJ</item>
<item>255,TZ</item>
<item>66,TH</item>
<item>228,TG</item>
<item>690,TK</item>
<item>676,TO</item>
<item>216,TN</item>
<item>90,TR</item>
<item>993,TM</item>
<item>688,TV</item>
<item>971,AE</item>
<item>256,UG</item>
<item>44,GB</item>
<item>380,UA</item>
<item>598,UY</item>
<item>1,US</item>
<item>998,UZ</item>
<item>678,VU</item>
<item>39,VA</item>
<item>58,VE</item>
<item>84,VN</item>
<item>681,WF</item>
<item>967,YE</item>
<item>260,ZM</item>
<item>263,ZW</item>
</string-array>

2-CopyThis Fonction à votre classe

public String GetCountryZipCode(){
    String CountryID="";
    String CountryZipCode="";

    TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    //getNetworkCountryIso
    CountryID= manager.getSimCountryIso().toUpperCase();
    String[] rl=this.getResources().getStringArray(R.array.CountryCodes);
    for(int i=0;i<rl.length;i++){
        String[] g=rl[i].split(",");
        if(g[1].trim().equals(CountryID.trim())){
            CountryZipCode=g[0];
            break;  
        }
    }
    return CountryZipCode;
}

Fonction 3 appels GetCountryZipCode ()

4-écrit Merci Wais.

139
Wais

Désolé de relancer un fil mort, mais j'ai passé un certain temps à essayer de résoudre ce problème, alors j'espère que ma réponse aidera quelqu'un d'autre.

L'exemple de la question d'origine est déroutant, vous dites que vous voulez ajouter le code du pays, mais donnez le code régional de New York 212 comme exemple; Ce n'est pas un code de pays, c'est un indicatif régional. Le code de pays pour les États-Unis est 1. Donc, vous voudriez que le numéro final ressemble à "1-212-xxx-xxxx". Ma réponse ci-dessous explique comment déterminer le code du pays, pas le code régional.

Pour obtenir le code d'appel du pays pour votre propre numéro, utilisez getSimCountryIso (). N'utilisez pas getNetworkCountryIso (); getNetworkCountryIso retournera le pays dans lequel vous vous trouvez actuellement, mais si vous voyagez, cela retournera le mauvais pays. Par exemple, si vous êtes d'Albanie mais que vous voyagez à New York, getSimCountryIso renverra "al", mais getNetworkCountryIso renverra "us". Évidemment, si vous utilisez le code de pays pour les États-Unis, vous avez un mauvais numéro.

Vous avez maintenant un code de pays à deux caractères; par exemple, le Canada sera "ca". Vous pouvez ensuite l'utiliser comme clé de recherche pour le tableau ci-dessous (obtenu à partir de http://www.sikosoft.com/item/international_telephone_country_codes_in_xml_format_using_iso_639-1 ).

Étant donné que les codes de pays ne changent jamais, il est acceptable de coder en dur une table de recherche dans votre application. Malheureusement, il ne semble pas y avoir de moyen direct d'obtenir le code de pays actuel de l'utilisateur.

<?xml version='1.0' encoding='UTF-8'?>
<icc>
    <AF>93</AF>
    <AL>355</AL>
    <DZ>213</DZ>
    <AD>376</AD>
    <AO>244</AO>
    <AQ>672</AQ>
    <AR>54</AR>
    <AM>374</AM>
    <AW>297</AW>
    <AU>61</AU>
    <AT>43</AT>
    <AZ>994</AZ>
    <BH>973</BH>
    <BD>880</BD>
    <BY>375</BY>
    <BE>32</BE>
    <BZ>501</BZ>
    <BJ>229</BJ>
    <BT>975</BT>
    <BO>591</BO>
    <BA>387</BA>
    <BW>267</BW>
    <BR>55</BR>
    <BN>673</BN>
    <BG>359</BG>
    <BF>226</BF>
    <MM>95</MM>
    <BI>257</BI>
    <KH>855</KH>
    <CM>237</CM>
    <CA>1</CA>
    <CV>238</CV>
    <CF>236</CF>
    <TD>235</TD>
    <CL>56</CL>
    <CN>86</CN>
    <CX>61</CX>
    <CC>61</CC>
    <CO>57</CO>
    <KM>269</KM>
    <CG>242</CG>
    <CD>243</CD>
    <CK>682</CK>
    <CR>506</CR>
    <HR>385</HR>
    <CU>53</CU>
    <CY>357</CY>
    <CZ>420</CZ>
    <DK>45</DK>
    <DJ>253</DJ>
    <TL>670</TL>
    <EC>593</EC>
    <EG>20</EG>
    <SV>503</SV>
    <GQ>240</GQ>
    <ER>291</ER>
    <EE>372</EE>
    <ET>251</ET>
    <FK>500</FK>
    <FO>298</FO>
    <FJ>679</FJ>
    <FI>358</FI>
    <FR>33</FR>
    <PF>689</PF>
    <GA>241</GA>
    <GM>220</GM>
    <GE>995</GE>
    <DE>49</DE>
    <GH>233</GH>
    <GI>350</GI>
    <GR>30</GR>
    <GL>299</GL>
    <GT>502</GT>
    <GN>224</GN>
    <GW>245</GW>
    <GY>592</GY>
    <HT>509</HT>
    <HN>504</HN>
    <HK>852</HK>
    <HU>36</HU>
    <IN>91</IN>
    <ID>62</ID>
    <IR>98</IR>
    <IQ>964</IQ>
    <IE>353</IE>
    <IM>44</IM>
    <IL>972</IL>
    <IT>39</IT>
    <CI>225</CI>
    <JP>81</JP>
    <JO>962</JO>
    <KZ>7</KZ>
    <KE>254</KE>
    <KI>686</KI>
    <KW>965</KW>
    <KG>996</KG>
    <LA>856</LA>
    <LV>371</LV>
    <LB>961</LB>
    <LS>266</LS>
    <LR>231</LR>
    <LY>218</LY>
    <LI>423</LI>
    <LT>370</LT>
    <LU>352</LU>
    <MO>853</MO>
    <MK>389</MK>
    <MG>261</MG>
    <MW>265</MW>
    <MY>60</MY>
    <MV>960</MV>
    <ML>223</ML>
    <MT>356</MT>
    <MH>692</MH>
    <MR>222</MR>
    <MU>230</MU>
    <YT>262</YT>
    <MX>52</MX>
    <FM>691</FM>
    <MD>373</MD>
    <MC>377</MC>
    <MN>976</MN>
    <ME>382</ME>
    <MA>212</MA>
    <MZ>258</MZ>
    <NA>264</NA>
    <NR>674</NR>
    <NP>977</NP>
    <NL>31</NL>
    <AN>599</AN>
    <NC>687</NC>
    <NZ>64</NZ>
    <NI>505</NI>
    <NE>227</NE>
    <NG>234</NG>
    <NU>683</NU>
    <KP>850</KP>
    <NO>47</NO>
    <OM>968</OM>
    <PK>92</PK>
    <PW>680</PW>
    <PA>507</PA>
    <PG>675</PG>
    <PY>595</PY>
    <PE>51</PE>
    <PH>63</PH>
    <PN>870</PN>
    <PL>48</PL>
    <PT>351</PT>
    <PR>1</PR>
    <QA>974</QA>
    <RO>40</RO>
    <RU>7</RU>
    <RW>250</RW>
    <BL>590</BL>
    <WS>685</WS>
    <SM>378</SM>
    <ST>239</ST>
    <SA>966</SA>
    <SN>221</SN>
    <RS>381</RS>
    <SC>248</SC>
    <SL>232</SL>
    <SG>65</SG>
    <SK>421</SK>
    <SI>386</SI>
    <SB>677</SB>
    <SO>252</SO>
    <ZA>27</ZA>
    <KR>82</KR>
    <ES>34</ES>
    <LK>94</LK>
    <SH>290</SH>
    <PM>508</PM>
    <SD>249</SD>
    <SR>597</SR>
    <SZ>268</SZ>
    <SE>46</SE>
    <CH>41</CH>
    <SY>963</SY>
    <TW>886</TW>
    <TJ>992</TJ>
    <TZ>255</TZ>
    <TH>66</TH>
    <TG>228</TG>
    <TK>690</TK>
    <TO>676</TO>
    <TN>216</TN>
    <TR>90</TR>
    <TM>993</TM>
    <TV>688</TV>
    <AE>971</AE>
    <UG>256</UG>
    <GB>44</GB>
    <UA>380</UA>
    <UY>598</UY>
    <US>1</US>
    <UZ>998</UZ>
    <VU>678</VU>
    <VA>39</VA>
    <VE>58</VE>
    <VN>84</VN>
    <WF>681</WF>
    <YE>967</YE>
    <ZM>260</ZM>
    <ZW>263</ZW>
</icc>
27
OldSchool4664

Cette question m'a tellement aidé, je veux vous donner à tous une classe qui fournit le code de pays à partir du code de téléphone et vice versa.

Usage:

  • CountryCodes.getCode(String country) renvoie le code international du signe du pays
  • CountryCodes.getCountry(String code) renvoie les signes des pays à partir du code international

Une instance de cette classe peut être fournie en tant qu'adaptateur aux vues, par exemple dans Activity onCreate:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout);    // your layout xml

    Spinner s = ( Spinner )findViewById( R.id.spinner1 );  // id of your spinner
    CountryCodes cc = new CountryCodes( this );
    s.setAdapter( cc );

    TelephonyManager man = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    int index = CountryCodes.getIndex( man.getSimCountryIso() );
    if( index > -1 )
    {
        s.setSelection( index );
    }
}

Ce qui suit est le code de classe

CountryCodes.Java
import Java.util.ArrayList;
import Java.util.Locale;

import Android.content.Context;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.BaseAdapter;
import Android.widget.TextView;

/**
 * Call getCountry( String code ) to get matching country sign.
 * Call getCode( String country ) to get matching phone code.
 * It has been extended from BaseAdapter in order to make it compatible with Spinner,
 * ListView and so on (just instance it and give it as adapter).
 * 
 * This class is provided AS IS without any warranty.
 * 
 * @author Niki Romagnoli
 *
 */

public class CountryCodes extends BaseAdapter{

    private static final String[] m_Countries = {
        "AD",
        "AE",
        "AF",
        "AL",
        "AM",
        "AN",
        "AO",
        "AQ",
        "AR",
        "AT",
        "AU",
        "AW",
        "AZ",
        "BA",
        "BD",
        "BE",
        "BF",
        "BG",
        "BH",
        "BI",
        "BJ",
        "BL",
        "BN",
        "BO",
        "BR",
        "BT",
        "BW",
        "BY",
        "BZ",
        "CA",
        "CC",
        "CD",
        "CF",
        "CG",
        "CH",
        "CI",
        "CK",
        "CL",
        "CM",
        "CN",
        "CO",
        "CR",
        "CU",
        "CV",
        "CX",
        "CY",
        "CZ",
        "DE",
        "DJ",
        "DK",
        "DZ",
        "EC",
        "EE",
        "EG",
        "ER",
        "ES",
        "ET",
        "FI",
        "FJ",
        "FK",
        "FM",
        "FO",
        "FR",
        "GA",
        "GB",
        "GE",
        "GH",
        "GI",
        "GL",
        "GM",
        "GN",
        "GQ",
        "GR",
        "GT",
        "GW",
        "GY",
        "HK",
        "HN",
        "HR",
        "HT",
        "HU",
        "ID",
        "IE",
        "IL",
        "IM",
        "IN",
        "IQ",
        "IR",
        "IT",
        "JO",
        "JP",
        "KE",
        "KG",
        "KH",
        "KI",
        "KM",
        "KP",
        "KR",
        "KW",
        "KZ",
        "LA",
        "LB",
        "LI",
        "LK",
        "LR",
        "LS",
        "LT",
        "LU",
        "LV",
        "LY",
        "MA",
        "MC",
        "MD",
        "ME",
        "MG",
        "MH",
        "MK",
        "ML",
        "MM",
        "MN",
        "MO",
        "MR",
        "MT",
        "MU",
        "MV",
        "MW",
        "MX",
        "MY",
        "MZ",
        "NA",
        "NC",
        "NE",
        "NG",
        "NI",
        "NL",
        "NO",
        "NP",
        "NR",
        "NU",
        "NZ",
        "OM",
        "PA",
        "PE",
        "PF",
        "PG",
        "PH",
        "PK",
        "PL",
        "PM",
        "PN",
        "PR",
        "PT",
        "PW",
        "PY",
        "QA",
        "RO",
        "RS",
        "RU",
        "RW",
        "SA",
        "SB",
        "SC",
        "SD",
        "SE",
        "SG",
        "SH",
        "SI",
        "SK",
        "SL",
        "SM",
        "SN",
        "SO",
        "SR",
        "ST",
        "SV",
        "SY",
        "SZ",
        "TD",
        "TG",
        "TH",
        "TJ",
        "TK",
        "TL",
        "TM",
        "TN",
        "TO",
        "TR",
        "TV",
        "TW",
        "TZ",
        "UA",
        "UG",
        "US",
        "UY",
        "UZ",
        "VA",
        "VE",
        "VN",
        "VU",
        "WF",
        "WS",
        "YE",
        "YT",
        "ZA",
        "ZM",
        "ZW"
    };

    private static final String[] m_Codes = {
        "376",
        "971",
        "93",
        "355",
        "374",
        "599",
        "244",
        "672",
        "54",
        "43",
        "61",
        "297",
        "994",
        "387",
        "880",
        "32",
        "226",
        "359",
        "973",
        "257",
        "229",
        "590",
        "673",
        "591",
        "55",
        "975",
        "267",
        "375",
        "501",
        "1",
        "61",
        "243",
        "236",
        "242",
        "41",
        "225",
        "682",
        "56",
        "237",
        "86",
        "57",
        "506",
        "53",
        "238",
        "61",
        "357",
        "420",
        "49",
        "253",
        "45",
        "213",
        "593",
        "372",
        "20",
        "291",
        "34",
        "251",
        "358",
        "679",
        "500",
        "691",
        "298",
        "33",
        "241",
        "44",
        "995",
        "233",
        "350",
        "299",
        "220",
        "224",
        "240",
        "30",
        "502",
        "245",
        "592",
        "852",
        "504",
        "385",
        "509",
        "36",
        "62",
        "353",
        "972",
        "44",
        "91",
        "964",
        "98",
        "39",
        "962",
        "81",
        "254",
        "996",
        "855",
        "686",
        "269",
        "850",
        "82",
        "965",
        "7",
        "856",
        "961",
        "423",
        "94",
        "231",
        "266",
        "370",
        "352",
        "371",
        "218",
        "212",
        "377",
        "373",
        "382",
        "261",
        "692",
        "389",
        "223",
        "95",
        "976",
        "853",
        "222",
        "356",
        "230",
        "960",
        "265",
        "52",
        "60",
        "258",
        "264",
        "687",
        "227",
        "234",
        "505",
        "31",
        "47",
        "977",
        "674",
        "683",
        "64",
        "968",
        "507",
        "51",
        "689",
        "675",
        "63",
        "92",
        "48",
        "508",
        "870",
        "1",
        "351",
        "680",
        "595",
        "974",
        "40",
        "381",
        "7",
        "250",
        "966",
        "677",
        "248",
        "249",
        "46",
        "65",
        "290",
        "386",
        "421",
        "232",
        "378",
        "221",
        "252",
        "597",
        "239",
        "503",
        "963",
        "268",
        "235",
        "228",
        "66",
        "992",
        "690",
        "670",
        "993",
        "216",
        "676",
        "90",
        "688",
        "886",
        "255",
        "380",
        "256",
        "1",
        "598",
        "998",
        "39",
        "58",
        "84",
        "678",
        "681",
        "685",
        "967",
        "262",
        "27",
        "260",
        "263"
    };

    private Context m_Context;

    public CountryCodes( Context cxt )
    {
        super();

        m_Context = cxt;
    }

    /**
     * Get phone code from country sign.
     * 
     * @param country: two-chars country sign to fetch ("US", "IT", "GB", ...)
     * @return string of matching phone code ("1", "39", "44", ...). null if none matches.
     */
    public static String getCode( String country )
    {
        int index = getIndex( country );
        return index == -1? null: getCode(index);
    }

    /**
     * Get international code at provided index.
     * 
     * @param index: array index
     * @return international code
     */
    public static String getCode( int index )
    {
        return m_Codes[index];
    }

    /**
     * Get country signs from phone code.
     * More countries may match the same code. 
     * 
     * @param code: phone code to fetch ("1", "39", "44", ...)
     * @return list of uppercase country signs (["US","PR","CA"], ["IT","VA"], ["GB","IM"], ...)
     *          Empty list if none matches.
     */
    public static ArrayList<String> getCountry( String code )
    {
        ArrayList<String> matches = new ArrayList<String>();
        getCountry(code, matches);
        return matches;
    }

    /**
     * Memory cheap version of country fetching: uses user provided list as output which outside 
     * could be recycled on desire.
     * 
     * @param code: country sign to fetch
     * @param matches: list to fill with matches, used as output
     */
    public static void getCountry( String code, ArrayList<String> matches )
    {
        matches.clear();

        for( int i=0; i<m_Codes.length; ++i )
            if( m_Codes[i].equals( code ) )
                matches.add(getCountry(i));
    }

    /**
     * Returns country sign at specified index of internal array.
     * 
     * @param index: index to fetch
     * @return country sign
     */
    public static String getCountry( int index )
    {
        return m_Countries[index];
    }

    /**
     * Looks for country sign array index.
     * 
     * @param country: country sign to search
     * @return array index. -1 if none matches.
     */
    public static int getIndex( String country )
    {
        String search = country.toUpperCase(Locale.getDefault());

        for( int i=0; i<m_Countries.length; ++i )
            if( m_Countries[i].equals( search ) )
                return i;

        return -1;
    }

    @Override
    public int getCount() {
        return m_Codes.length;
    }

    @Override
    public Object getItem(int index) {
        return m_Countries[index];
    }

    @Override
    public long getItemId(int index) {
        return index;
    }

    @Override
    public View getView(int index, View recycleView, ViewGroup viewGroup) {
        TextView view;
        if( recycleView == null )
        {
            view = new TextView(m_Context);
            view.setPadding(30, 10, 10, 10);
        }
        else
        {
            view = (TextView)recycleView;
        }

        view.setText(m_Countries[index]);

        return view;
    }
}

Je l'utilise et semble fonctionner mais, vous savez, la mort et les impôts sont certains. N'hésitez pas à le personnaliser et à suggérer des correctifs.

HTH

17
TechNyquist

Utilisation compile 'com.googlecode.libphonenumber:libphonenumber:8.0.1' dépendance. Cela rend la tâche facile et fournit des résultats précis, car c'est par google.

Ici vous pouvez en savoir plus.

La sortie que je reçois est quelque chose comme ceci:

enter image description here

Ici, j'utilise spinner.

1) J'ai créé un adaptateur CountryCodesAdapter personnalisé:

package com.amitupadhyay.getcountrycode;

import Android.content.Context;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.BaseAdapter;
import Android.widget.CheckedTextView;
import Android.widget.TextView;

import com.google.i18n.phonenumbers.PhoneNumberUtil;

import Java.util.ArrayList;
import Java.util.Collections;
import Java.util.Comparator;
import Java.util.List;
import Java.util.Locale;

/**
 * Created by aupadhyay on 1/24/17.
 */

public class CountryCodesAdapter extends BaseAdapter {

    private final LayoutInflater mInflater;
    private final List<CountryCode> mData;
    private final int mViewId;
    private final int mDropdownViewId;
    private int mSelected;

    public static final class CountryCode implements Comparable<String> {
        public String regionCode;
        public int countryCode;
        public String regionName;

        @Override
        public int compareTo(String another) {
            return regionCode != null && another != null ? regionCode.compareTo(another) : 1;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o)
                return true;

            if (o != null && o instanceof CountryCode) {
                CountryCode other = (CountryCode) o;

                return regionCode != null &&
                        regionCode.equals(other.regionCode);
            }

            return false;
        }

        @Override
        public String toString() {
            return regionCode;
        }
    }

    public CountryCodesAdapter(Context context, int viewId, int dropdownViewId) {
        this(context, new ArrayList<CountryCode>(), viewId, dropdownViewId);
    }

    public CountryCodesAdapter(Context context, List<CountryCode> data, int viewId, int dropdownViewId) {
        mInflater = LayoutInflater.from(context);
        mData = data;
        mViewId = viewId;
        mDropdownViewId = dropdownViewId;
    }

    public void add(CountryCode entry) {
        mData.add(entry);
    }

    public void add(String regionCode) {
        CountryCode cc = new CountryCode();
        cc.regionCode = regionCode;
        cc.countryCode = PhoneNumberUtil.getInstance().getCountryCodeForRegion(regionCode);
        cc.regionName = getRegionDisplayName(regionCode, Locale.getDefault());
        mData.add(cc);
    }

    public void clear() {
        mData.clear();
    }

    public void sort(Comparator<? super CountryCode> comparator) {
        Collections.sort(mData, comparator);
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        CountryCode e = mData.get(position);
        return (e != null) ? e.countryCode : -1;
    }

    public int getPositionForId(CountryCode cc) {
        return cc != null ? mData.indexOf(cc) : -1;
    }

    public void setSelected(int position) {
        mSelected = position;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        CheckedTextView textView;
        View view;
        if (convertView == null) {
            view = mInflater.inflate(mDropdownViewId, parent, false);
            textView = (CheckedTextView) view.findViewById(Android.R.id.text1);
            view.setTag(textView);
        }
        else {
            view = convertView;
            textView = (CheckedTextView) view.getTag();
        }

        CountryCode e = mData.get(position);

        StringBuilder text = new StringBuilder(5)
                .append(e.regionName)
                .append(" (+")
                .append(e.countryCode)
                .append(')');

        textView.setText(text);
        textView.setChecked((mSelected == position));

        return view;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView textView;
        View view;
        if (convertView == null) {
            view = mInflater.inflate(mViewId, parent, false);
            textView = (TextView) view.findViewById(Android.R.id.text1);
            view.setTag(textView);
        }
        else {
            view = convertView;
            textView = (TextView) view.getTag();
        }

        CountryCode e = mData.get(position);

        StringBuilder text = new StringBuilder(3)
                .append('+')
                .append(e.countryCode)
                .append(" (")
                .append(e.regionName)
                .append(')');

        textView.setText(text);

        return view;
    }

    /** Returns the localized region name for the given region code. */
    public String getRegionDisplayName(String regionCode, Locale language) {
        return (regionCode == null || regionCode.equals("ZZ") ||
                regionCode.equals(PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY))
                ? "" : new Locale("", regionCode).getDisplayCountry(language);
    }
}

2) Maintenant, la disposition de mon activité où j'affiche le spinner du code pays est:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_height="match_parent"
    Android:layout_width="match_parent"
    Android:orientation="vertical">
    <include layout="@layout/toolbar_simple"/>
    <ScrollView
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:scrollbars="vertical" >

        <LinearLayout
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:gravity="center_horizontal"
            Android:orientation="vertical"
            Android:padding="18dip" >

            <Spinner Android:id="@+id/phone_cc"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:spinnerMode="dialog"/>

            <EditText
                Android:id="@+id/phone_number"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:hint="@string/hint_validation_number"
                Android:inputType="phone" />

            <Button
                Android:id="@+id/button_validate"
                Android:layout_width="match_parent"
                Android:layout_height="fill_parent"
                Android:text="@string/button_validate" />

           </LinearLayout>

    </ScrollView>
</LinearLayout>

3) Java Le code d'activité est ci-dessous:

package com.amitupadhyay.getcountrycode;

import Android.annotation.SuppressLint;
import Android.content.Context;
import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.telephony.TelephonyManager;
import Android.view.View;
import Android.widget.AdapterView;
import Android.widget.Button;
import Android.widget.EditText;
import Android.widget.Spinner;

import com.amitupadhyay.getcountrycode.CountryCodesAdapter.CountryCode;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;

import Java.util.Comparator;
import Java.util.HashSet;
import Java.util.Locale;
import Java.util.Set;

public class NumberValidation extends AppCompatActivity {

    private Spinner mCountryCode;
    private EditText mPhone;
    private Button mValidateButton;

    /**
     * Compatibility method for {@link PhoneNumberUtil#getSupportedRegions()}.
     * This was introduced because crappy Honeycomb has an old version of
     * libphonenumber, therefore Dalvik will insist on we using it.
     * In case getSupportedRegions doesn't exist, getSupportedCountries will be
     * used.
     */
    @SuppressWarnings("unchecked")
    private Set<String> getSupportedRegions(PhoneNumberUtil util) {
        try {
            return (Set<String>) util.getClass()
                    .getMethod("getSupportedRegions")
                    .invoke(util);
        }
        catch (NoSuchMethodException e) {
            try {
                return (Set<String>) util.getClass()
                        .getMethod("getSupportedCountries")
                        .invoke(util);
            }
            catch (Exception helpme) {
                // ignored
            }
        }
        catch (Exception e) {
            // ignored
        }
        return new HashSet<>();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.number_validation);
        //setupToolbar(false);

        mCountryCode = (Spinner) findViewById(R.id.phone_cc);
        mPhone = (EditText) findViewById(R.id.phone_number);
        mValidateButton = (Button) findViewById(R.id.button_validate);

        // populate country codes
        final CountryCodesAdapter ccList = new CountryCodesAdapter(this,
                Android.R.layout.simple_list_item_1,
                Android.R.layout.simple_spinner_dropdown_item);
        PhoneNumberUtil util = PhoneNumberUtil.getInstance();
        Set<String> ccSet = getSupportedRegions(util);
        for (String cc : ccSet)
            ccList.add(cc);

        ccList.sort(new Comparator<CountryCodesAdapter.CountryCode>() {
            public int compare(CountryCodesAdapter.CountryCode lhs, CountryCodesAdapter.CountryCode rhs) {
                return lhs.regionName.compareTo(rhs.regionName);
            }
        });
        mCountryCode.setAdapter(ccList);
        mCountryCode.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                ccList.setSelected(position);
            }

            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub
            }
        });

        // FIXME this doesn't consider creation because of configuration change
        Phonenumber.PhoneNumber myNum = getMyNumber(this);
        if (myNum != null) {
            CountryCode cc = new CountryCode();
            cc.regionCode = util.getRegionCodeForNumber(myNum);
            if (cc.regionCode == null)
                cc.regionCode = util.getRegionCodeForCountryCode(myNum.getCountryCode());
            mCountryCode.setSelection(ccList.getPositionForId(cc));
            mPhone.setText(String.valueOf(myNum.getNationalNumber()));
        }
        else {
            final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            final String regionCode = tm.getSimCountryIso().toUpperCase(Locale.US);
            CountryCode cc = new CountryCode();
            cc.regionCode = regionCode;
            cc.countryCode = util.getCountryCodeForRegion(regionCode);
            mCountryCode.setSelection(ccList.getPositionForId(cc));
        }
    }

    /** Returns the (parsed) number stored in this device SIM card. */
    @SuppressLint("HardwareIds")
    public Phonenumber.PhoneNumber getMyNumber(Context context) {
        try {
            final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            final String regionCode = tm.getSimCountryIso().toUpperCase(Locale.US);
            return PhoneNumberUtil.getInstance().parse(tm.getLine1Number(), regionCode);
        }
        catch (Exception e) {
            return null;
        }
    }
}

Peu de fonctionnalités supplémentaires:

a) Votre pays sera automatiquement sélectionné dans le spinner.

Pour y parvenir, j'ai utilisé ceci:

 Phonenumber.PhoneNumber myNum = getMyNumber(this);
        if (myNum != null) {
            CountryCode cc = new CountryCode();
            cc.regionCode = util.getRegionCodeForNumber(myNum);
            if (cc.regionCode == null)
                cc.regionCode = util.getRegionCodeForCountryCode(myNum.getCountryCode());
            mCountryCode.setSelection(ccList.getPositionForId(cc));
            mPhone.setText(String.valueOf(myNum.getNationalNumber()));
        }
        else {
            final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            final String regionCode = tm.getSimCountryIso().toUpperCase(Locale.US);
            CountryCode cc = new CountryCode();
            cc.regionCode = regionCode;
            cc.countryCode = util.getCountryCodeForRegion(regionCode);
            mCountryCode.setSelection(ccList.getPositionForId(cc));
        }

Je pense que cette méthode est un peu meilleure que les autres méthodes énumérées ici. J'ai donc posté ça. J'espère que quelqu'un pourra le trouver utile :-)

Ce projet sur GitHub est ici

12
Amit Upadhyay

dans ce cas, cela ressemblerait à:

    /**
     * network iso code: referred and listed at:
     * http://en.wikipedia.org/wiki/List_of_mobile_country_codes
     */
    TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    Constants.DEVICE_COUNTRY = manager.getNetworkCountryIso();

Donc, personne n'a à regarder et à vérifier (le contexte est une variable locale d'un objet Context valide). Constants.DEVICE_COUNTRY est de type String :) (juste une variable)

6
cV2

ajoutez-les au string.xml Enjoy :)

<string-array name="country_code">
            <item></item>
             <item>
                +93

            </item>
            <item>
               +355
            </item>
            <item>
                +213
            </item>
            <item>
                +1684
            </item>
            <item>
                +376
            </item>
            <item>
                +244
            </item>
            <item>
                +1264
            </item>
            <item>
                +672
            </item>
            <item>
                +1268
            </item>
            <item>
                +54
            </item>
            <item>
                +374
            </item>
            <item>
              +297
            </item>
            <item>
                +61
            </item>
            <item>
                +43
            </item>
            <item>
                +994
            </item>
            <item>
                +1242
            </item>
            <item>
                +973
            </item>
            <item>
                +880
            </item>
            <item>
                +1246
            </item>
            <item>
               +375
            </item>
            <item>
                +32
            </item>
            <item>
                +501
            </item>
            <item>
                +229
            </item>
            <item>
                +1441
            </item>
            <item>
                +975
            </item>
            <item>
                +591
            </item>
            <item>
                +387
            </item>
            <item>
                +267
            </item>
            <item>
                +55
            </item>
            <item>
                +246
            </item>
            <item>
                +1284
            </item>
            <item>
                +673
            </item>
            <item>
                +359
            </item>
            <item>
                +226
            </item>
            <item>
                +257
            </item>
            <item>
                +855
            </item>
            <item>
                +237
            </item>
            <item>
                +1
            </item>
            <item>
                +238
            </item>
            <item>
                +1345
            </item>
            <item>
                +236
            </item>
            <item>
                +235
            </item>
            <item>
                +56
            </item>
            <item>
               +86
            </item>
            <item>
                +61
            </item>
            <item>
                +61
            </item>
            <item>
                +57
            </item>
            <item>
                +269
            </item>
            <item>
                +682
            </item>
            <item>
                +506
            </item>
            <item>
                +385
            </item>
            <item>
                +53
            </item>
            <item>
                +599
            </item>
            <item>
                +357
            </item>
            <item>
                +420
            </item>
            <item>
                +243
            </item>
            <item>
               +45
            </item>
            <item>
                +253
            </item>
            <item>
                +1767
            </item>
            <item>
                +1809
            </item>
            <item>
                +670
            </item>
            <item>
                +593
            </item>
            <item>
                +20
            </item>
            <item>
               +503
            </item>
            <item>
               +240
            </item>
            <item>
                +291
            </item>
            <item>
                +372
            </item>
            <item>
                +251
            </item>
            <item>
                +500
            </item>
            <item>
                +298
            </item>
            <item>
               +679
            </item>
            <item>
                +358
            </item>
            <item>
                +33
            </item>
            <item>
                +689
            </item>
            <item>
                +241
            </item>
            <item>
                +220
            </item>
            <item>
                +995
            </item>
            <item>
               +49
            </item>
            <item>
                +233
            </item>
            <item>
                +350
            </item>
            <item>
                +30
            </item>
            <item>
                +299
            </item>
            <item>
               +1473
            </item>
            <item>
                +1671
            </item>
            <item>
                +502
            </item>
            <item>
                +441481
            </item>
            <item>
               +224
            </item>
            <item>
                +245
            </item>
            <item>
                +592
            </item>
            <item>
                +509
            </item>
            <item>
                +504
            </item>
            <item>
               +852
            </item>
            <item>
                +36
            </item>
            <item>
                +354
            </item>
            <item>
               +91
            </item>
            <item>
                +62
            </item>
            <item>
                +98
            </item>
            <item>
               +964
            </item>
            <item>
                +53
            </item>
            <item>
             +441624
            </item>
            <item>
               +972
            </item>
            <item>
                +39
            </item>
            <item>
               +225
            </item>
            <item>
               +1876
            </item>
            <item>
                +81
            </item>
            <item>
                +441534
            </item>
            <item>
                +962
            </item>
            <item>
               +7
            </item>
            <item>
                +254
            </item>
            <item>
               +686
            </item>
            <item>
                +383
            </item>
            <item>
                +965
            </item>
            <item>
               +996
            </item>
            <item>
                +856
            </item>
            <item>
               +371
            </item>
            <item>
                +961
            </item>
            <item>
                +266
            </item>
            <item>
                +231
            </item>
            <item>
                +218
            </item>
            <item>
               +423
            </item>
            <item>
              +370
            </item>
            <item>
                +352
            </item>
            <item>
                +853
            </item>
            <item>
               +389
            </item>
            <item>
               +261
            </item>
            <item>
              +265
            </item>
            <item>
               +60
            </item>
            <item>
               +960
            </item>
            <item>
                +223
            </item>
            <item>
                +356
            </item>
            <item>
                +692
            </item>
            <item>
              +222
            </item>
            <item>
               +230
            </item>
            <item>
               +262
            </item>
            <item>
               +52
            </item>
            <item>
               +691
            </item>
            <item>
               +373
            </item>
            <item>
             +377
            </item>
            <item>
                +976
            </item>
            <item>
                +382
            </item>
            <item>
               +1664
            </item>
            <item>
                +212
            </item>
            <item>
                +258
            </item>
            <item>
              +95
            </item>
            <item>
               +264
            </item>
            <item>
                +674
            </item>
            <item>
               +977
            </item>
            <item>
                +31
            </item>
            <item>
                +599
            </item>
            <item>
                +687
            </item>
            <item>
              +64

            </item>
            <item>
                +505
            </item>
            <item>
                +227
            </item>
            <item>
                +234
            </item>
            <item>
                +683
            </item>
            <item>
                +850
            </item>
            <item>
                +1670
            </item>
            <item>
                +47
            </item>
            <item>
               +968
            </item>
            <item>
               +92
            </item>
            <item>
                +680
            </item>
            <item>
                +970
            </item>
            <item>
                +507
            </item>
            <item>
                +675
            </item>
            <item>
                +595
            </item>
            <item>
               +51
            </item>
            <item>
               +63
            </item>
            <item>
               +64
            </item>
            <item>
                +48
            </item>
            <item>
                +351
            </item>
            <item>
               +1787
            </item>
            <item>
                +974
            </item>
            <item>
               +242
            </item>
            <item>
                +262
            </item>
            <item>
               +40
            </item>
            <item>
              +7
            </item>
            <item>
                +250
            </item>
            <item>
                +590
            </item>
            <item>
                +290
            </item>
            <item>
                +1869
            </item>
            <item>
                +1758
            </item>
            <item>
                +590
            </item>
            <item>
                +508
            </item>
            <item>
                +1784
            </item>
            <item>
                +685
            </item>
            <item>
                +378
            </item>
            <item>
                +239
            </item>
            <item>
                +966
            </item>
            <item>
                +221
            </item>
            <item>
                +381
            </item>
            <item>
                +248
            </item>
            <item>
               +232
            </item>
            <item>
               +65
            </item>
            <item>
               +1721
            </item>
            <item>
                +421
            </item>
            <item>
                +386
            </item>
            <item>
                +677
            </item>
            <item>
                +252
            </item>
            <item>
              +27
            </item>
            <item>
               +82
            </item>
            <item>
               +211
            </item>
            <item>
               +34
            </item>
            <item>
                +94
            </item>
            <item>
              +249
            </item>
            <item>
             +597
            </item>
            <item>
               +47
            </item>
            <item>
                +268
            </item>
            <item>
               +46
            </item>
            <item>
                +41
            </item>
            <item>
               +963
            </item>
            <item>
                +886
            </item>
            <item>
                +992
            </item>
            <item>
                +255
            </item>
            <item>
               +66
            </item>
            <item>
                +228
            </item>
            <item>
               +690
            </item>
            <item>
                +676
            </item>
            <item>
               +1868
            </item>
            <item>
               +216
            </item>
            <item>
                +90
            </item>
            <item>
               +993
            </item>
            <item>
                +1649
            </item>
            <item>
                +688
            </item>
            <item>
                +1340
            </item>
            <item>
                +256
            </item>
            <item>
                +380
            </item>
            <item>
               +971
            </item>
            <item>
                +44
            </item>
            <item>
                +1
            </item>
            <item>
               +598
            </item>
            <item>
                +998
            </item>
            <item>
                +678
            </item>
            <item>
                +379
            </item>
            <item>
                +58
            </item>
            <item>
                +84
            </item>
            <item>
               +681
            </item>
            <item>
                +212
            </item>
            <item>
                967
            </item>
            <item>
                260
            </item>
            <item>
                263
            </item>
        </string-array>
        <string-array name="country_arrays">
            <item>Code</item>
            <item>Afghanistan</item>
            <item>Albania</item>
            <item>Algeria</item>
            <item>American Samoa</item>
            <item>Andorra</item>
            <item>Angola</item>
            <item>Anguilla</item>
            <item>Antarctica</item>
            <item>Antigua and Barbuda</item>
            <item>Argentina</item>
            <item>Armenia</item>
            <item>Aruba</item>
            <item>Australia</item>
            <item>Austria</item>
            <item>Azerbaijan</item>
            <item>Bahrain</item>
            <item>Bangladesh</item>
            <item>Barbados</item>
            <item>Belarus</item>
            <item>Belgium</item>
            <item>Belize</item>
            <item>Benin</item>
            <item>Bermuda</item>
            <item>Bhutan</item>
            <item>Bolivia</item>
            <item>Bosnia and Herzegovina</item>
            <item>Botswana</item>
            <item>Bouvet Island</item>
            <item>Brazil</item>
            <item>British Indian Ocean Territory</item>
            <item>British Virgin Islands</item>
            <item>Brunei</item>
            <item>Bulgaria</item>
            <item>Burkina Faso</item>
            <item>Burundi</item>
            <item>Cambodia</item>
            <item>Cameroon</item>
            <item>Canada</item>
            <item>Cape Verde</item>
            <item>Cayman Islands</item>
            <item>Central African Republic</item>
            <item>Chad</item>
            <item>Chile</item>
            <item>China</item>
            <item>Christmas Island</item>
            <item>Cocos (Keeling) Islands</item>
            <item>Colombia</item>
            <item>Comoros</item>
            <item>Congo</item>
            <item>Cook Islands</item>
            <item>Costa Rica</item>
            <item>Cote d\'Ivoire</item>
            <item>Croatia</item>
            <item>Cuba</item>
            <item>Cyprus</item>
            <item>Czech Republic</item>
            <item>Democratic Republic of the Congo</item>
            <item>Denmark</item>
            <item>Djibouti</item>
            <item>Dominica</item>
            <item>Dominican Republic</item>
            <item>East Timor</item>
            <item>Ecuador</item>
            <item>Egypt</item>
            <item>El Salvador</item>
            <item>Equatorial Guinea</item>
            <item>Eritrea</item>
            <item>Estonia</item>
            <item>Ethiopia</item>
            <item>Faeroe Islands</item>
            <item>Falkland Islands</item>
            <item>Fiji</item>
            <item>Finland</item>
            <item>Former Yugoslav Republic of Macedonia</item>
            <item>France</item>
            <item>French Guiana</item>
            <item>French Polynesia</item>
            <item>French Southern Territories</item>
            <item>Gabon</item>
            <item>Georgia</item>
            <item>Germany</item>
            <item>Ghana</item>
            <item>Gibraltar</item>
            <item>Greece</item>
            <item>Greenland</item>
            <item>Grenada</item>
            <item>Guadeloupe</item>
            <item>Guam</item>
            <item>Guatemala</item>
            <item>Guinea</item>
            <item>Guinea-Bissau</item>
            <item>Guyana</item>
            <item>Haiti</item>
            <item>Heard Island and McDonald Islands</item>
            <item>Honduras</item>
            <item>Hong Kong</item>
            <item>Hungary</item>
            <item>Iceland</item>
            <item>India</item>
            <item>Indonesia</item>
            <item>Iran</item>
            <item>Iraq</item>
            <item>Ireland</item>
            <item>Israel</item>
            <item>Italy</item>
            <item>Jamaica</item>
            <item>Japan</item>
            <item>Jordan</item>
            <item>Kazakhstan</item>
            <item>Kenya</item>
            <item>Kiribati</item>
            <item>Kuwait</item>
            <item>Kyrgyzstan</item>
            <item>Laos</item>
            <item>Latvia</item>
            <item>Lebanon</item>
            <item>Lesotho</item>
            <item>Liberia</item>
            <item>Libya</item>
            <item>Liechtenstein</item>
            <item>Lithuania</item>
            <item>Luxembourg</item>
            <item>Macau</item>
            <item>Madagascar</item>
            <item>Malawi</item>
            <item>Malaysia</item>
            <item>Maldives</item>
            <item>Mali</item>
            <item>Malta</item>
            <item>Marshall Islands</item>
            <item>Martinique</item>
            <item>Mauritania</item>
            <item>Mauritius</item>
            <item>Mayotte</item>
            <item>Mexico</item>
            <item>Micronesia</item>
            <item>Moldova</item>
            <item>Monaco</item>
            <item>Mongolia</item>
            <item>Montenegro</item>
            <item>Montserrat</item>
            <item>Morocco</item>
            <item>Mozambique</item>
            <item>Myanmar</item>
            <item>Namibia</item>
            <item>Nauru</item>
            <item>Nepal</item>
            <item>Netherlands</item>
            <item>Netherlands Antilles</item>
            <item>New Caledonia</item>
            <item>New Zealand</item>
            <item>Nicaragua</item>
            <item>Niger</item>
            <item>Nigeria</item>
            <item>Niue</item>
            <item>Norfolk Island</item>
            <item>North Korea</item>
            <item>Northern Marianas</item>
            <item>Norway</item>
            <item>Oman</item>
            <item>Pakistan</item>
            <item>Palau</item>
            <item>Panama</item>
            <item>Papua New Guinea</item>
            <item>Paraguay</item>
            <item>Peru</item>
            <item>Philippines</item>
            <item>Pitcairn Islands</item>
            <item>Poland</item>
            <item>Portugal</item>
            <item>Puerto Rico</item>
            <item>Qatar</item>
            <item>Reunion</item>
            <item>Romania</item>
            <item>Russia</item>
            <item>Rwanda</item>
            <item>Sqo Tome and Principe</item>
            <item>Saint Helena</item>
            <item>Saint Kitts and Nevis</item>
            <item>Saint Lucia</item>
            <item>Saint Pierre and Miquelon</item>
            <item>Saint Vincent and the Grenadines</item>
            <item>Samoa</item>
            <item>San Marino</item>
            <item>Saudi Arabia</item>
            <item>Senegal</item>
            <item>Serbia</item>
            <item>Seychelles</item>
            <item>Sierra Leone</item>
            <item>Singapore</item>
            <item>Slovakia</item>
            <item>Slovenia</item>
            <item>Solomon Islands</item>
            <item>Somalia</item>
            <item>South Africa</item>
            <item>South Georgia and the South Sandwich Islands</item>
            <item>South Korea</item>
            <item>South Sudan</item>
            <item>Spain</item>
            <item>Sri Lanka</item>
            <item>Sudan</item>
            <item>Suriname</item>
            <item>Svalbard and Jan Mayen</item>
            <item>Swaziland</item>
            <item>Sweden</item>
            <item>Switzerland</item>
            <item>Syria</item>
            <item>Taiwan</item>
            <item>Tajikistan</item>
            <item>Tanzania</item>
            <item>Thailand</item>
            <item>The Bahamas</item>
            <item>The Gambia</item>
            <item>Togo</item>
            <item>Tokelau</item>
            <item>Tonga</item>
            <item>Trinidad and Tobago</item>
            <item>Tunisia</item>
            <item>Turkey</item>
            <item>Turkmenistan</item>
            <item>Turks and Caicos Islands</item>
            <item>Tuvalu</item>
            <item>Virgin Islands</item>
            <item>Uganda</item>
            <item>Ukraine</item>
            <item>United Arab Emirates</item>
            <item>United Kingdom</item>
            <item>United States</item>
            <item>United States Minor Outlying Islands</item>
            <item>Uruguay</item>
            <item>Uzbekistan</item>
            <item>Vanuatu</item>
            <item>Vatican City</item>
            <item>Venezuela</item>
            <item>Vietnam</item>
            <item>Wallis and Futuna</item>
            <item>Western Sahara</item>
            <item>Yemen</item>
            <item>Yugoslavia</item>
            <item>Zambia</item>
            <item>Zimbabwe</item>
        </string-array>
3
Vikrant singh

Je le sais bien trop tard. Mais j'en ai une solution de pâte. Comme le faire avec la liste de String et le parcourir peut le ralentir. Utiliser Hashmap serait une solution idéale pour cela. J'ai écrit une classe PhoneUtil pour cela. Voici le code (je n'ai qu'une vingtaine de pays mais vous pouvez en ajouter d'autres)

import Android.content.Context;
import Android.telephony.TelephonyManager;

import Java.util.HashMap;

/**
 * Created by Dell on 1/19/2017.
 */

public class PhoneUtil {
    public static String getCountryCode(Context context) {
        TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (manager != null) {
            return getCountryCodeFromMap(manager.getSimCountryIso().toUpperCase());
        } else {
            return null;

        }

    }

    private static String getCountryCodeFromMap(String countryCode) {
        HashMap<String, String> countryCodeMap = new HashMap<>();

          countryCodeMap.put("TJ", "+992");
    countryCodeMap.put("TZ", "+255");
    countryCodeMap.put("TH", "+66");
    countryCodeMap.put("TG", "+228");
    countryCodeMap.put("TK", "+690");
    countryCodeMap.put("TO", "+676");
    countryCodeMap.put("TN", "+216");
    countryCodeMap.put("TR", "+90");
    countryCodeMap.put("TM", "+993");
    countryCodeMap.put("TV", "+688");
    countryCodeMap.put("AE", "+971");
    countryCodeMap.put("UG", "+256");
    countryCodeMap.put("GB", "+44");
    countryCodeMap.put("UA", "+380");
    countryCodeMap.put("UY", "+598");
    countryCodeMap.put("US", "+1");
    countryCodeMap.put("UZ", "+998");
    countryCodeMap.put("VU", "+678");
    countryCodeMap.put("VA", "+39");
    countryCodeMap.put("VE", "+58");
    countryCodeMap.put("VN", "+84");
    countryCodeMap.put("WF", "+681");
    countryCodeMap.put("YE", "+967");
    countryCodeMap.put("ZM", "+260");
    countryCodeMap.put("ZW", "+263");
    countryCodeMap.put( "MY","+60");
    countryCodeMap.put("PK","+92");
        return countryCodeMap.get(countryCode);
    }
}
1
Nouman Ghaffar

S'il vous arrive d'utiliser Google libphonenumber de toute façon, et si vous travaillez avec des numéros de téléphone, il est plutôt probable que vous le fassiez, vous pouvez utiliser ses données internes qui décrivent la même chose. Ce n'est pas public, vous devez donc utiliser la réflexion pour y accéder:

Map<Integer, List<String>> CountryCodeToRegionCodeMap_getCountryCodeToRegionCodeMap() {
  try {
    Method method = CountryCodeToRegionCodeMap.class.getDeclaredMethod("getCountryCodeToRegionCodeMap");
    method.setAccessible(true);
    return (Map<Integer, List<String>>) method.invoke(null);
  }
  catch (Exception e) {
    Log.e(..., e.toString());
    return null;
  }
}

Ensuite, vous pouvez rechercher ou traiter cette carte pour obtenir les données souhaitées.

1
Gábor

Il s'agit d'un code à insérer dans votre activité principale pour remplacer le code que Wais a affiché en haut de cette page. Prenez le tableau que Wais a publié et ajoutez-le à votre application dans les ressources. J'aurais peut-être légèrement changé le nom du tableau à stocker dans les ressources, à part cela, ce code devrait bien fonctionner et être plus facile à lire si vous apprenez:

public String getCountryCode()
{
    String my_country_code_letters = getMyLocale().getCountry();

    String[] country_codes = this.getResources().getStringArray(R.array.country_codes);

    String my_country_code_number = null;
    //------------------------------------------------------------------------------------------
    for (int i=0; i < country_codes.length && i != (-1); i++)
    {
        /**split_code:
         * 1) split_code[0] == numbers
         * 2) split_code[1] == letters**/
        String[] split_code = country_codes[i].split(",");
        //--------------------------------------------------------------------------------------
        if (split_code[1].matches(my_country_code_letters))
        {
            my_country_code_number = split_code[0];
            break;
        }
        //--------------------------------------------------------------------------------------
    }
    //------------------------------------------------------------------------------------------

    return my_country_code_number;
}

public Locale getMyLocale()
{
    Log.i(TAG, "Running getMyLocale()");

    Locale myLocale = "";
    //------------------------------------------------------------------------------------------
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
    {
        myLocale = getBaseContext().getResources().getConfiguration().getLocales().get(0);
    }
    else
    {
        //noinspection deprecation
        myLocale = getBaseContext().getResources().getConfiguration().locale;
    }
    //------------------------------------------------------------------------------------------

    return myLocale;
}
0
JamisonMan111

Dans la classe TelephonyManager, je trouve une méthode public String getNetworkCountryIso (), c'est peut-être ce que vous voulez. En outre, il existe une autre méthode qui peut renvoyer plus d'informations sur le téléphone. Vous pouvez lire http://en.wikipedia.org/wiki/List_of_mobile_country_codes pour voir quel pays est représenté par un MCC.

0
Huang