我正在尝试创建一个打开联系人的按钮,然后当您选择一个联系人时,它会获取电子邮件并将其添加到应用程序中的字段中。
我一直在使用这里找到的解决方案:
如何拨打Android联系人列表并从其详细信息屏幕中选择一个电话号码?
我已经更改了选择电子邮件的代码,但我仍然得到了电话号码。
代码如下:
@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);
}
对不起,我不知道为什么它仍然会得到电话号码。但是,您可以通过正则表达式再次筛选联系人的结果,如果与电子邮件地址匹配,则保存,如果不匹配,则删除
我很抱歉我的英语不好!
添加这样的方法:
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);
}
}