如何判断电话号码是否已加星标?

时间:2014-05-29 02:18:02

标签: android

即使联系人中列出的电话号码已加星标,以下结果始终会返回true,为什么?

public static boolean IsStarred(Context myContext,String address){
    boolean result=false;
    if (address.trim().length() >= 1) {
        Uri uri = Uri.parse("content://com.android.contacts/phone_lookup");
        String[] projection = new String[] { "display_name" };
        uri = Uri.withAppendedPath(uri, Uri.encode(address));
        Cursor cursor = myContext.getContentResolver().query(uri,
                projection, "starred=?", new String[] {"1"}, null);
        if (cursor.moveToFirst()) {
            result = true;
            Toast.makeText(myContext,cursor.getString(0)+ "True",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(myContext, "False",Toast.LENGTH_SHORT).show();
        }
        cursor.close();
    }

    return result;
}

1 个答案:

答案 0 :(得分:1)

提供完整的工作代码需要很长的答案,这通常超出了本网站的范围。

我建议您尝试将此要求划分为其组件。如果您想知道来电是否来自已加星标的联系人,那就意味着:

  1. 检测来电,并确定主叫号码。这可以通过组合权限,BroadcastReceiver和PhoneStateListener来实现。 @GabeSechan的优秀答案可以找到here
  2. 根据电话号码查找联系人。这需要querying a ContentProvider,特别是PhoneLookup contract似乎对此案例有用。
  3. 确定此联系人是否已加星标(此处很简单,因为PhoneLookup表包含该列。
  4. 如果您在实施此解决方案时遇到特定问题,请发布更详细的问题。