1

電話番号を文字列として指定した場合、連絡先に保存されている正しい値を見つけるにはどうすればよいですか?

例:指定された
電話番号: 9743343954
連絡先の電話番号: +919743343954

編集:数字の長さは固定されていません。

ありがとう。

4

5 に答える 5

3

私はあなたが何を意味するのか理解できませんが、多分これはあなたを助けるでしょう:

    //Find contact by given number
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode("9743343954"));
    String[] projection = new String[] { PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER };
    Cursor c = getContentResolver().query(uri, projection, null, null, null);
    if (c.moveToFirst()) {// while(c.moveToNext()){
        //get number assigned by user to given contact, in this case 9743343954
        String number = c.getString(c.getColumnIndexOrThrow(PhoneLookup.NUMBER));
        //get normalized E164 number, in this case +919743343954
        String normalized = c.getString(c.getColumnIndexOrThrow(PhoneLookup.NORMALIZED_NUMBER));
        Toast.makeText(getApplicationContext(), "Number: " + number + "; normalized: " + normalized,
                Toast.LENGTH_LONG).show();
    }
    c.close();

これを機能させるには、プロジェクト マニフェストにアクセス許可を追加します。

    <uses-permission android:name="android.permission.READ_CONTACTS" />
于 2013-03-02T16:06:16.267 に答える
2

Using your example, the phone number is of length 10 characters, in contacts it is 13, and you want the last 10 of those to match. So, something like:

// I am assuming that you've removed all spaces, full stops,
// dashes etc from the two input variables
public boolean numbersMatch(String numberToMatch, String numberFromContacts) {
    // Ensure that the both numbers are of a reasonable length
    if (numberToMatch.length() < 9) return false;
    if (numberFromContacts.length() < 9) return false;

    // Is the number to match hidden in the contacts number
    if (numberFromContacts.lastIndexOf(numberToMatch) != -1) return true;

    // Or is the contact number hidden in the number to macth
    if (numberToMatch.lastIndexOf(numberFromContacts) != -1) return true;

    // No match, so return false
    return false;
}
于 2013-03-02T14:43:08.753 に答える
1

なぜあなたはこれをしないのですか

与えられた電話番号が

String a = "9123456789";

そして、連絡先にあるのは

String b = "+91-9123456789";

次に、この方法で簡単に確認できます

if(b.contains(a))
{
//Do what you want!
}
于 2013-03-02T15:41:30.153 に答える
1

関連する連絡先(または関連情報)を取得したい場合は、@Lechoからの回答が良いようです。このページの詳細については、android doc http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.htmlを参照してください。

私の知る限り、 PhoneLookup.NORMALIZED_NUMBER は API 16 以降で利用できます。

反対に、2 つの数値を比較して、それらが同じであるが 2 つの異なる方法でフォーマットされているかどうかを確認する場合は、次のように使用できます。

PhoneNumberUtils.compare(phoneNumber1, phoneNumber2)

一番、

于 2013-12-20T11:56:22.867 に答える
-1

最初のステップは、余分なスペースと余分な文字をすべて削除することです。

//Removes the extra characters from the incoming number
    private String removeExtraCharacters(String phoneNumber){
        try
        {
            phoneNumber = phoneNumber.replace("(", "");
            phoneNumber = phoneNumber.replace(")", "");
            phoneNumber = phoneNumber.replace("-", "");
            phoneNumber = phoneNumber.replace(" ", "");
            phoneNumber = phoneNumber.replace("+", "");

        }
        catch (Exception e) 
        {
            Log.e("Cal Reciever_R", e.toString());
        }
        return phoneNumber;
    }

次のように、部分文字列メソッドを使用して 10 桁の数字を取得し、先頭の +91 を無視できます。

phoneNumber =phoneNumber .substring(phoneNumber .length()-10);
于 2013-03-02T15:28:44.440 に答える