从电话号码中检索联系人姓名

时间:2013-05-08 18:35:46

标签: android eclipse android-contacts phone-number

自从过去几天以来,我一直在寻找一种方法,使用我已经存储在变量中的电话号码来检索联系人姓名,不幸的是,到目前为止我找到的所有内容似乎都在使用已弃用的函数/调用。

当然,我尝试以自己的方式做到这一点,但我觉得我的Android / JAVA知识还不足以理解这个概念,在我尝试运行任何东西时不断出现一些错误或强行关闭。

到目前为止,我能找到的最好的东西是这样的:

public String getContactName(final String phoneNumber) 
    {  
        Uri uri;
        String[] projection;

        if (Build.VERSION.SDK_INT >= 5)
        {
            uri = Uri.parse("content://com.android.contacts/phone_lookup");
            projection = new String[] { "display_name" };
        }
        else
        { 
            uri = Uri.parse("content://contacts/phones/filter");
            projection = new String[] { "name" }; 
        } 

        uri = Uri.withAppendedPath(uri, Uri.encode(phoneNumber)); 
        Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); 

        String contactName = "";

        if (cursor.moveToFirst()) 
        { 
            contactName = cursor.getString(0);
        } 

        cursor.close();
        cursor = null;

        return contactName; 
    }

但是通过使用这段代码,Eclipse告诉我:上下文无法解决。 我发现很多代码和解释都是使用这个 Context 的东西,但是在阅读之后我仍然不理解它:What is 'Context' on Android?

任何帮助将不胜感激, 非常感谢你

1 个答案:

答案 0 :(得分:0)

如果您在活动中使用此功能,那么使用this即可获得上下文。所以基本上在这里,不是拨打context.getContentResolver(),而是拨打this.getContentResolver()或只是getContentResolver()

Eclipse抱怨基本上是因为你试图调用一个名为context的方法,Eclipse不知道这个方法,因为它没有在任何地方声明。如果你之前做过类似Context context = this;的事情,那会很有用,但那真的没用。

getContentResolver()是由Activity声明和定义的方法,它是您的活动扩展的类,因此您可以像这样调用它。

我希望它有所帮助。至于这个上下文到底是什么,我很抱歉,但我无法帮助你,因为我甚至不确定我是否理解正确。

此外,请注意,我没有检查您发布的代码,我不知道它是否适用于从电话号码获取联系人姓名。只是想帮你摆脱上下文无法解决错误。