gpt4 book ai didi

android - 从联系人选择器中获取号码

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:38 25 4
gpt4 key购买 nike

在用户从联系人选择器中选择联系人后,我试图获取联系人姓名和电话号码。我试图让我的应用程序适用于 SDK v3 及更高版本,因此我创建了一个抽象类,它只调用我需要的 API。我已经让抽象类工作了(它选择了正确的 API),而且我也让 SDK v3,4 的 API 工作了。我在获取使用 ContactsContract 的较新 API 时遇到问题。

我可以获得联系人姓名,但它检索到的号码始终是它之前的联系人 ID 的号码!示例:我有 2 个联系人“John Doe”和“Jane Doe”,联系人中分别添加了号码“555-555-555”和“777-777-7777”。 John Doe 是 ID=1,Jane Doe 是 ID=2。如果我尝试获取 Jane Doe 的电话号码,我会得到 John 的电话号码,555-555-5555。如果我试图得到约翰的,我什么也得不到。 if (cursor.moveToNext()) 的检查失败。

你能帮我解决这个问题吗?这让我发疯。我看过很多很多例子,但总是遇到同样的错误。

Intent数据是来自onActivityResult的数据Intent

 
import java.util.ArrayList;<p></p>

<p>import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;</p>

<p>class NewContactsAdapterBridge extends ContactsAdapterBridge {</p>

ArrayList<String> info = new ArrayList<String>();
ArrayList<String> getInfo (Activity a, Intent data) {
Uri contactData = data.getData();

Cursor cursor = a.managedQuery(contactData, null, null, null, null);

if (cursor.moveToFirst()) {
String id = cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts._ID));

String name = cursor.getString(cursor.getColumnIndexOrThrow
(ContactsContract.Contacts.DISPLAY_NAME));

String hasPhoneNumber = cursor.getString(cursor.getColumnIndexOrThrow(
ContactsContract.Contacts.HAS_PHONE_NUMBER));
info.add(name);

if (Integer.parseInt(hasPhoneNumber) > 0) {
Uri myPhoneUri = Uri.withAppendedPath(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
id);

Cursor pCur = a.managedQuery(
myPhoneUri,
null,
null,
null,
null);
if (pCur.moveToNext()) {
String number = pCur.getString( pCur.getColumnIndex
(ContactsContract.CommonDataKinds.Phone.NUMBER));
info.add(number);
}
}
}
return info;
}
}

最佳答案

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_RESULT:
final EditText phoneInput = (EditText) findViewById(R.id.phoneNumberInput);
Cursor cursor = null;
String phoneNumber = "";
List<String> allNumbers = new ArrayList<String>();
int phoneIdx = 0;
try {
Uri result = data.getData();
String id = result.getLastPathSegment();
cursor = getContentResolver().query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + "=?", new String[] { id }, null);
phoneIdx = cursor.getColumnIndex(Phone.DATA);
if (cursor.moveToFirst()) {
while (cursor.isAfterLast() == false) {
phoneNumber = cursor.getString(phoneIdx);
allNumbers.add(phoneNumber);
cursor.moveToNext();
}
} else {
//no results actions
}
} catch (Exception e) {
//error actions
} finally {
if (cursor != null) {
cursor.close();
}

final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(your_class.this);
builder.setTitle("Choose a number");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
String selectedNumber = items[item].toString();
selectedNumber = selectedNumber.replace("-", "");
phoneInput.setText(selectedNumber);
}
});
AlertDialog alert = builder.create();
if(allNumbers.size() > 1) {
alert.show();
} else {
String selectedNumber = phoneNumber.toString();
selectedNumber = selectedNumber.replace("-", "");
phoneInput.setText(selectedNumber);
}

if (phoneNumber.length() == 0) {
//no numbers found actions
}
}
break;
}
} else {
//activity result error actions
}
}

您需要对其进行调整以与您的应用一起使用

关于android - 从联系人选择器中获取号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com