Android : Check phone number present in Contact List ? (Phone number retrieve from phone call)

前端 未结 4 1420
时光取名叫无心
时光取名叫无心 2021-02-02 14:03

I make a BroadcastReceiver to receive Phone number of the person who call me




        
相关标签:
4条回答
  • 2021-02-02 14:15

    I think it's important to say that you need to add the following in your manifest file.

    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    
    0 讨论(0)
  • 2021-02-02 14:25

    for 1 you should have a look at the recommended ContactsContract.PhoneLookup provider

    A table that represents the result of looking up a phone number, for example for caller ID. To perform a lookup you must append the number you want to find to CONTENT_FILTER_URI. This query is highly optimized.

    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
    }
    

    for 2 you can use the context from the onReceive method to call methods that belong to Context

    ContentResolver cr=context.getContentResolver();
    
    0 讨论(0)
  • 2021-02-02 14:29

    I suggest you to use Phone.CONTENT_FILTER_URI instead of PhoneLookup.CONTENT_FILTER_URI because PhoneLookup can be empty and you will get no result from time to time (tested on LG-P500, froyo)

    The problem on my device happens for example when:

    1. switch to airplane mode
    2. use the default message application to send a sms (will be queued).
    3. use PhoneLookup.CONTENT_FILTER_URI to query for a contact

    Not all devices seems to be affected

    Using PhoneLookup.CONTENT_FILTER_URI the returned cursor is always empty. Using Phone.CONTENT_FILTER_URI everything is ok (you find the contact if any).

    Therefore I suggest you to always use Phone.* Uris except when you really need to use PhoneLookup.*... Which usually is just address book synchronization related stuff (and most of the times is not what you are interested in).

    0 讨论(0)
  • 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()) {
             cur.close();
             return true;
       }
       } finally {
       if (cur != null)
          cur.close();
       }
       return false;
    }
    
    0 讨论(0)
提交回复
热议问题