2011-07-08 55 views
1

我真的很驚訝,我無法在任何地方找到答案。所以這是問題。查詢聯繫人(歸一化)電話號碼

ContentResolver resolver = getContentResolver(); 

String[] columns = new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER }; 
String where = Phone.NUMBER+"=?"; 
String[] params = new String[] {"777 777 7777"}; 
Cursor cursor = resolver.query(Phone.CONTENT_URI, columns, where, params, null);  

while (cursor.moveToNext()) { /* So on....*/ 

當params中的電話號碼被格式化爲「777 777 7777」時,我沒有記錄。當它是「777-777-7777」時,它會得到記錄。更糟糕的是TelephonyManager.EXTRA_INCOMING_NUMBER給我的號碼爲「7777777777」。如何查詢此電話號碼?文檔說Phone.NUMBER是用戶輸入它的方式。那麼,這對我沒有任何好處!

回答

5

試試這個:

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber));   
Cursor cs= context.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},null,null,null); 

if(cs.getCount()>0) 
    contactName=cs.getString(cs.getColumnIndex(PhoneLookup.DISPLAY_NAME)); 

cs.close(); 

編輯(根據您的評論)

String phoneNumber = "777 777 7777"; 
Uri uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(phoneNumber));  
String[] columns = new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };  
Cursor cursor = resolver.query(uri, columns, null, null, null); 
+0

謝謝!我結束了這個: String phoneNumber =「777 777 7777」; \t \t烏里URI = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI,Uri.encode(phoneNumber的)); \t \t字符串[]列=新的String [] {Phone.CONTACT_ID,Phone.DISPLAY_NAME,Phone.NUMBER}; \t \t光標光標= resolver.query(URI,列,NULL,NULL,NULL); – user123321

+0

喜歡哥們:) :) –

+1

謝謝。後續問題:該查詢非常慢,需要1300毫秒才能在具有4個聯繫人的模擬器中執行。你知道有什麼方法來加速它嗎?當我有數百個聯繫人時,我很擔心。 – user123321

相關問題