Android Contacts合同不返回电话号码,而是返回姓名
我已使用此代码显示我的手机的名称和电话号码,即使它只返回名称,如果您有任何回答,我将不胜感激。如果我同步了谷歌账户,它也能工作吗 代码: 公共类MainActivity扩展了ActionBarActivity{Android Contacts合同不返回电话号码,而是返回姓名,android,android-contacts,contactscontract,Android,Android Contacts,Contactscontract,我已使用此代码显示我的手机的名称和电话号码,即使它只返回名称,如果您有任何回答,我将不胜感激。如果我同步了谷歌账户,它也能工作吗 代码: 公共类MainActivity扩展了ActionBarActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (people != null && people.moveToFirst()) {
do {
try {
int nameFieldColumnIndex = people.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
Log.d("CONTACT: ", contact);
int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
String number = people.getString(numberFieldColumnIndex);
Log.d("NUMBER: ", number);
} catch (Exception e) {
Log.e("ERROR: ", e.toString());
}
} while (people.moveToNext());
}
}
错误:
04-16 05:16:27.839 1426-1426/com.chatter.contactsaccess D/CONTACT:﹕ Test
04-16 05:16:27.839 1426-1426/com.chatter.contactsaccess D/NUMBER:﹕ 1
已编辑没有
联系人contract.PhoneLookup.NUMBER
出现在
Contacts contract.Contacts.CONTENT\u URI
,使用
Contacts contract.Contacts.HAS\u电话号码
您可以尝试以下代码获取手机中的所有电话联系人 在创建活动时,传递打开电话联系人的意图,如
private static final int PICK_CONTACT=1;
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
并在onAcivityResult中获取所选联系人的详细信息,如下所示
public void onActivityResult(int reqCode, int resultCode, Intent data) {
if(reqCode==0)return;
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
ContentResolver cr=getActivity().getContentResolver();
final Cursor c = cr.query(contactData, null, null, null, null);
if (c.moveToFirst()) {
ArrayList<String> alNumbers=new ArrayList<>();
String id =c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String hasPhone =c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone.equalsIgnoreCase("1")) {
Cursor phones = getActivity().getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,
null, null);
if(phones.moveToFirst())
{
while(!phones.isAfterLast())
{
cNumber = phones.getString(phones.getColumnIndex("data1"));
alNumbers.add(cNumber);
phones.moveToNext();
}
}
phones.close();
final CharSequence[] items = alNumbers.toArray(new String[alNumbers.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Choose a number");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
cNumber = items[item].toString();
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
phone.setText(name+" ("+cNumber+")");
}
});
AlertDialog alert = builder.create();
if(alNumbers.size() > 1) {
alert.show();
}
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
activityresult上的公共void(int-reqCode、int-resultCode、Intent-data){
如果(reqCode==0)返回;
super.onActivityResult(请求代码、结果代码、数据);
开关(reqCode){
案例(选择联系人):
if(resultCode==Activity.RESULT\u确定){
Uri contactData=data.getData();
ContentResolver cr=getActivity().getContentResolver();
最终光标c=cr.query(contactData,null,null,null,null);
if(c.moveToFirst()){
ArrayList alNumbers=新的ArrayList();
字符串id=c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._id));
String hasPhone=c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if(hasPhone.equalsIgnoreCase(“1”)){
光标=getActivity().getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,
contacts contract.commonDataTypes.Phone.CONTACT_ID+“=”+ID,
空,空);
if(phones.moveToFirst())
{
而(!phones.isAfterLast())
{
cNumber=phones.getString(phones.getColumnIndex(“data1”);
alNumbers.add(cNumber);
phones.moveToNext();
}
}
电话。关闭();
final CharSequence[]items=alNumbers.toArray(新字符串[alNumbers.size()]);
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
builder.setTitle(“选择一个数字”);
setItems(items,新的DialogInterface.OnClickListener()对话框){
公共void onClick(对话框接口对话框,int项){
cNumber=items[item].toString();
name=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_name));
phone.setText(name+”(“+cNumber+”);
}
});
AlertDialog alert=builder.create();
如果(alNumbers.size()>1){
alert.show();
}
name=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_name));
}
我通过更改Contacts contract.Contacts.CONTENT\u URI
的Contacts contract.commondatatypes.Phone.CONTENT\u URI
截取的代码如下(我只想得到字符串中的姓名和电话):
像这样使用游标,首先使用if条件,然后执行while循环if(people!=null&&people.moveToFirst()){do{//您的代码}while(people.moveToNext()}输出仍然是一样的,你解决了吗?它返回1,但我如何获得号码doesn似乎不起作用,他使用的是不推荐的方法,他的函数HAST_PHONE…返回0如果它返回0尝试单击其他号码,如果它返回1,你将获得号码,可能它没有电话号码,不,有电话号码i不推荐使用。
managedQuery(contactData,null,null,null,null);
不推荐使用,我刚刚创建了一个带有数字的人。
public void onActivityResult(int reqCode, int resultCode, Intent data) {
if(reqCode==0)return;
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
ContentResolver cr=getActivity().getContentResolver();
final Cursor c = cr.query(contactData, null, null, null, null);
if (c.moveToFirst()) {
ArrayList<String> alNumbers=new ArrayList<>();
String id =c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String hasPhone =c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone.equalsIgnoreCase("1")) {
Cursor phones = getActivity().getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,
null, null);
if(phones.moveToFirst())
{
while(!phones.isAfterLast())
{
cNumber = phones.getString(phones.getColumnIndex("data1"));
alNumbers.add(cNumber);
phones.moveToNext();
}
}
phones.close();
final CharSequence[] items = alNumbers.toArray(new String[alNumbers.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Choose a number");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
cNumber = items[item].toString();
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
phone.setText(name+" ("+cNumber+")");
}
});
AlertDialog alert = builder.create();
if(alNumbers.size() > 1) {
alert.show();
}
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
Cursor people = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while(people.moveToNext()) {
int nameFieldColumnIndex = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String number = people.getString(numberFieldColumnIndex);
Log.e("CONTACT: ", contact + " " + number);
}
people.close();