【问题标题】:Android fetch email from contacts doesn't workAndroid从联系人获取电子邮件不起作用
【发布时间】:2013-11-29 07:31:01
【问题描述】:

我正在尝试创建一个打开联系人的按钮,然后当您选择一个联系人时,它会获取电子邮件并将其添加到应用程序的字段中。

我一直在使用这里找到的解决方案:

How to call Android contacts list AND Select one phone number from its details screen?

我已经更改了选择电子邮件的代码,但我仍然得到电话号码。

代码如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data != null) {
        Uri uri = data.getData();

        if (uri != null) {
            Cursor c = null;
            try {
                c = getContentResolver().query(uri, new String[]{ 
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID,  
                            ContactsContract.Contacts.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Email.ADDRESS},
                        null, null, null);

                if (c != null && c.moveToFirst()) {
                    long number = c.getLong(0);
                    String type = c.getString(1);
                    String mail = c.getString(2);
                    showSelectedNumber(type, number, mail);
                }
            } finally {
                if (c != null) {
                    c.close();
                }
            }
        }
    }
}

public void showSelectedNumber(String number, long type, String email) {
    Toast.makeText(this, type + ": " + number+ ": " + email, Toast.LENGTH_LONG).show();      
}

编辑: 问题出在 onClick 调用的初始查询上。我正在发布正确的功能

private static final int CONTACT_PICKER_RESULT = 1001;
private static final String DEBUG_TAG = null;  
public void doLaunchContactPicker(View view) {  
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE);
    startActivityForResult(intent, 1);  
}

【问题讨论】:

    标签: android android-contacts


    【解决方案1】:

    对不起,我不知道为什么它仍然得到电话号码。但是,您可以通过正则表达式再次筛选联系人的结果,如果匹配到电子邮件地址,则保存,如果不匹配,则删除

    对不起,我的英语不好!

    添加这样的方法:

    private boolean checkMailAddress(String mailAddress){
    final String MAIL_ADDR_REGEX = "([\\w-\\.\\\\+]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
    return mailAddress.matches(MAIL_ADDR_REGEX);
    

    }

    我认为你应该使用 "while" ,而不是 "if":

     while(c != null && c.moveToNext()) {
       long number = c.getLong(0);
       String type = c.getString(1);
       String mail = c.getString(2);
       if(checkMailAddress(mail)){
          showSelectedNumber(type, number, mail);
       }
    

    }

    【讨论】:

    • 你能举个例子吗?
    • 我已经修改了我的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多