我正在尝试查看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表,找不到他们的外键:(感谢所有的帮助
答案 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;
}