電話番号を文字列として指定した場合、連絡先に保存されている正しい値を見つけるにはどうすればよいですか?
例:指定された
電話番号: 9743343954
連絡先の電話番号: +919743343954
編集:数字の長さは固定されていません。
ありがとう。
電話番号を文字列として指定した場合、連絡先に保存されている正しい値を見つけるにはどうすればよいですか?
例:指定された
電話番号: 9743343954
連絡先の電話番号: +919743343954
編集:数字の長さは固定されていません。
ありがとう。
私はあなたが何を意味するのか理解できませんが、多分これはあなたを助けるでしょう:
//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" />
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;
}
なぜあなたはこれをしないのですか
与えられた電話番号が
String a = "9123456789";
そして、連絡先にあるのは
String b = "+91-9123456789";
次に、この方法で簡単に確認できます
if(b.contains(a))
{
//Do what you want!
}
関連する連絡先(または関連情報)を取得したい場合は、@Lechoからの回答が良いようです。このページの詳細については、android doc http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.htmlを参照してください。
私の知る限り、 PhoneLookup.NORMALIZED_NUMBER は API 16 以降で利用できます。
反対に、2 つの数値を比較して、それらが同じであるが 2 つの異なる方法でフォーマットされているかどうかを確認する場合は、次のように使用できます。
PhoneNumberUtils.compare(phoneNumber1, phoneNumber2)
一番、
最初のステップは、余分なスペースと余分な文字をすべて削除することです。
//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);