确定Android中的收藏夹联系人是否有来电

时间:2013-04-26 15:18:56

标签: java android sqlite

我正在尝试查看Android中来自收藏夹联系人的来电。 到目前为止,我的代码是:

    public class PhoneCallReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(final Context context, Intent intent) {
            TelephonyManager telephony = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            telephony.listen(new PhoneStateListener() {
                @Override
                public void onCallStateChanged(int state, String incomingNumber) {
                    super.onCallStateChanged(state, incomingNumber);
                    if (state == TelephonyManager.CALL_STATE_RINGING) {
                        if (ContactHelper.fromFavourites(context, incomingNumber)) {
                             //do stuff
                        }
                    }
                };

我的ContactHelper是这样的:

public static boolean fromFavourites(Context context, String phoneNumber) {
        final String[] projection = new String[] {ContactsContract.PhoneLookup._ID};
        Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); //use this to look up a phone number
        Cursor cursor = context.getContentResolver().query(lookupUri, projection, "starred=?", new String[] { "1" }, null);
        if (cursor != null && cursor.getCount() != 0) {
            System.out.println("OUTPUT: "+cursor0.getCount());
            return true;
        } else return false;
    }

我试过this solution但它只给了我所有最喜欢的联系人。我正在尝试使用PhoneLookup,因为从Android doc开始,它说

  

联系人表格中的列也可通过联接获得。

所以我认为我可以查询PhoneLookUp和Contacts表之间的连接,但似乎内容提供者无法进行连接。我打算为此编写一个原始SQLite脚本,但我不知道如何加入PhoneLookUp和Contacts表,找不到他们的外键:(感谢所有的帮助

2 个答案:

答案 0 :(得分:0)

您的第一个链接可以获得所有喜爱的联系人。现在要确定传入号码是否来自收藏,您必须检测来电。因此,使用PhoneStateListener来检测接入呼叫。当有来电检测时,只需检查收藏夹

检测来电

public class CustomPhoneStateListener extends PhoneStateListener {

public void onCallStateChange(int state, String number){
    switch(state){
        case TelephonyManager.CALL_STATE_RINGING:
            //call from number. check whether it is favorite or not
            break;
    }   
}

还使用以下权限

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

答案 1 :(得分:0)

public static boolean fromFavourites(Context context, String phoneNumber) {
    final String[] projection = new String[] {ContactsContract.PhoneLookup.STARRED};
    Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); //use this to look up a phone number
    Cursor cursor = context.getContentResolver().query(lookupUri, projection,  
                   ContactsContract.PhoneLookup.NUMBER + "=?", 
                    new String[] { phoneNumber}, null);
    if (cursor.moveToFirst()) {
        while (!cursor.isAfterLast()) {
            if (cursor.getInt(cursor.getColumnIndex(ContactsContract.PhoneLookup.STARRED)) == 1) {
            System.out.println("OUTPUT: " + cursor.getInt(0) );
            return true;
            }
            cursor.moveToNext();
        }   
    } 
    return false;
}