6

次のコードを使用して、電話から連絡先番号のリストを取得します。

Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

while(c.moveToNext()){
      Log.d(TAG,"NO.: "+ c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)));
}

API 16以降では、ユーザーがどのように保存したかに関係なく、E 164形式でフォーマットされたすべての連絡先が必要なため、これは私にとっては完全に機能します。

  1. ただし、API が 16 未満の場合、上記のコードは機能せず、次の行を使用してすべての連絡先の E 164 形式を取得できません。

     c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    

「PhoneNumberUtils」クラスは役に立ちませんでした。

また、連絡先の ISO 3166-1 2 文字の国コードがわからないため、 libphonenumberライブラリを使用して番号を E 164 形式に変換することもできません。

libphonenumber ライブラリを使用できるように、Android の連絡先ごとに ISO 3166-1 の 2 文字の国コードを取得する方法はありますか?

または、ポイント 1 を達成するための他の解決策はありますか。

電話から取得した番号は、任意の形式にすることができます。

  • ローカル : 965XXXXXXX
  • ナショナル : 0965XXXXXXX
  • 国際 : +91 96 5X XXXXXX
  • その他

一方、E 164 は +91XXXXXXXXXX で、91 は国コードです。

どんな助けでも大歓迎です!

4

2 に答える 2

4

を使用して、デフォルトの国コードにネットワーク言語を使用できますgetNetworkCountryIso。この方法は、CDMA ネットワークでは信頼できない場合があります (CDMA ネットワークgetPhoneType上にあるかどうかを判断するために使用します)。

連絡先に電話をかけるときに使用される値と同じであるため、正しい値を取得する必要があります。

地方から全国への番号については、私の国にはそのような機能がなく、あなたの国でどのように機能するのかわからないため、お手伝いできません.

于 2014-01-06T08:59:38.557 に答える
0

Honeycomb より前の Android では、番号を E.16 形式で保存していませんでした。したがって、下位の API レベルをサポートしている場合は、libphonenumber ライブラリを使用して自分でフォーマットする必要があります。連絡先アプリはCountryDetector、国コードが指定されていない場合、このサービスを使用して国コードを特定します。これは、デバイスで利用可能な情報に基づく包括的なヒューリスティックを使用します。このサービスはパブリック API の一部ではなく、Honeycomb より前には利用できませんでしたが、ComprehensiveCountryDetectorクラス内のコードをコピーして、独自のアプリで再利用できます。

Honeycomb のソースが入手できず、Honeycomb デバイスでテストする機会がなかったため、これらの問題に関連する Honeycomb の状態についてコメントすることはできません。

于 2014-01-12T03:47:45.177 に答える