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

问题描述:

我试图找出来自Android收藏夹联系人的来电。 到目前为止,我的代码是:确定来自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和联系人表,无法找到他们的外键:(感谢所有帮助

+0

刚才你的问题是什么?你想检查你的标题说什么?你的问题描述似乎与标题 – stinepike 2013-04-26 15:48:05

+0

不同,如果我没有说清楚,标题就是我想要达到的目标,我的问题描述就是我遇到的问题。我已经包含了一些代码,希望它得到更清晰 – Duc 2013-04-26 16:13:03

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; 
} 
+0

抱歉,但它不起作用。星号=?并且该参数仍然返回联系,不管它是否已加星标:(。 – Duc 2013-04-26 22:57:33

+0

我测试了新代码并且它工作了。 – 2013-04-27 02:03:46

+0

它的工作原理,谢谢。只是想知道在文档中,当它表示“联系人表中的列也是通过连接可用“是否意味着已经连接了2个表格,我们可以*使用任何一列? – Duc 2013-04-27 09:26:53

您的第一个链接可以得到现在确定来电号码是否来自最爱你必须检测来电,因此使用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" /> 
+0

感谢您的答案,但这是我已经做了,你的代码评论位是我坚持 – Duc 2013-04-26 16:14:37