2010-08-17 24 views
15

मैं एक BroadcastReceiver व्यक्ति के फोन नंबर प्राप्त करने के लिए बनाने के जो मुझे फोनएंड्रॉइड: संपर्क सूची में मौजूद फोन नंबर की जांच करें? (फोन नंबर फोन कॉल से प्राप्त करें)

<intent-filter> 
<action 
    android:name="android.intent.action.PHONE_STATE" /> 
</intent-filter> 
  1. फोन नंबर प्राप्त करता है, तो मेरे संपर्क सूची में है कैसे जाँच करने के लिए?
    आप एक टिप पता करने के लिए इस फ़ोन नंबर बाहर लोड हो रहा है संपर्क सूची के साथ संपर्क सूची पर मौजूद है, तो है?
    मैं अधिक जानकारी नहीं करना चाहते, बस मौजूद फ़ोन नंबर मौजूद हैं।

  2. यदि यह संभव नहीं है, और मुझे संपर्क सूची लोड करनी होगी, इसे BroadcastReceiver पर कैसे करें?
    जब मैं getContentResolver करने की कोशिश है, यह काम नहीं कर रहा है क्योंकि मैं अंदर ActivityBroadcastReceiver पर हूँ और नहीं ...

1 के लिए आपकी मदद की

उत्तर

31
public boolean contactExists(Context context, String number) { 
/// number is the phone number 
Uri lookupUri = Uri.withAppendedPath(
PhoneLookup.CONTENT_FILTER_URI, 
Uri.encode(number)); 
String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME }; 
Cursor cur = context.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null); 
try { 
    if (cur.moveToFirst()) { 
     return true; 
} 
} finally { 
if (cur != null) 
    cur.close(); 
} 
return false; 
} 
+0

कोड नमूना के लिए धन्यवाद :) यह काम कर रहा है – NicoMinsk

+0

मैंने इस कोड को आजमाया, और यह काम करता है जब मेरे पास "सटीक" संख्या होती है, लेकिन देश कोड के आधार पर, अन्य उपसर्गों को यह संख्या हमेशा नहीं मिलती है, भले ही संख्या मौजूद है, और इस नंबर को कॉल करने से वही व्यक्ति (संपर्क में संख्या: 5556, प्राप्त संख्या: 15555215556) – Gavriel

3

के लिए धन्यवाद आप की सिफारिश पर एक नजर है चाहिए ContactsContract.PhoneLookup प्रदाता

एक तालिका वाले किसी फ़ोन नंबर को देख, कॉलर आईडी के लिए उदाहरण के लिए के परिणाम का प्रतिनिधित्व करता है। लुकअप करने के लिए आपको उस नंबर को जोड़ना होगा जिसे आप CONTENT_FILTER_URI पर ढूंढना चाहते हैं। यह क्वेरी अत्यधिक अनुकूलित है।

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 
Cursor mycursor=resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,... 
if (mycursor!=null && mycursor.moveToFirst()) { 
// record exists 
} 

2 के लिए आप onReceive विधि से context उपयोग कर सकते हैं तरीकों कि संदर्भ से संबंधित कॉल करने के लिए

ContentResolver cr=context.getContentResolver(); 
7

मुझे लगता है यह कहना है कि आप में निम्नलिखित जोड़ने की जरूरत है महत्वपूर्ण है अपने प्रकट फ़ाइल

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
3

मैं तुम्हें अपने डिवाइस पर

समस्या

PhoneLookup.CONTENT_FILTER_URI के बजाय Phone.CONTENT_FILTER_URI उपयोग करने के लिए क्योंकि PhoneLookup खाली हो सकता है और आप समय-समय पर कोई परिणाम मिल जाएगा (एलजी- P500 पर परीक्षण किया, Froyo) का सुझाव उदाहरण के लिए जब से होता है:

  1. हवाई जहाज मोड
  2. करने के लिए स्विच डिफ़ॉल्ट संदेश अनुप्रयोग का उपयोग एक एसएमएस भेजने के लिए (पंक्ति में लग जाएँगे)।
  3. उपयोग PhoneLookup.CONTENT_FILTER_URI संपर्क

के लिए क्वेरी करने के लिए सभी उपकरण PhoneLookup.CONTENT_FILTER_URI का उपयोग करते हुए लौट आए कर्सर हमेशा खाली है

प्रभावित हो रहा है। का उपयोग करना Phone.CONTENT_FILTER_URI सब कुछ ठीक है (यदि आप किसी भी अगर संपर्क ढूंढने)।

इसलिए मेरा सुझाव है कि आपको हमेशा Phone.* उरिस का उपयोग करने के लिए सुझाव दें, सिवाय इसके कि आपको वास्तव में PhoneLookup.* का उपयोग करने की आवश्यकता है ... जो आमतौर पर केवल पता पुस्तिका सिंक्रनाइज़ेशन से संबंधित सामान है (और अधिकतर समय में आप रुचि रखते हैं)।

संबंधित मुद्दे