我正在尝试检索所有联系人的显示名称和电话号码,但我希望它只返回有号码的行.
目前我有这样的它,它的工作原理:
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,null, null, ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE NOCASE");
while (cur.moveToNext())
{
if ( Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contacts[index] = name;
Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
pCur.moveToFirst();
numbers[index] = pCur.getString( pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
index++;
pCur.close();
}
Run Code Online (Sandbox Code Playgroud)
事情是它需要4-5秒才能加载,因为它运行了cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
400次.
现在我的理解是,联系人的姓名和号码保存在不同的表中,您需要名称的ID才能获得该号码.
这可以更快地以任何其他方式完成吗?
提前致谢
我正在尝试使用一些数据启动本机添加联系人活动。我想通了大部分。现在我只是试图通过意图发送网站。这是代码
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
// Just some examples of information you can send to pre-fill out data for the
// user. See android.provider.ContactsContract.Intents.Insert for the complete
// list.
intent.putExtra(ContactsContract.Intents.Insert.NAME, "Foo");
intent.putExtra(ContactsContract.Intents.Insert.PHONE, "123456");
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, "foo@foo.com");
intent.putExtra(ContactsContract.Intents.Insert.POSTAL, "foo drive, foo");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
android.provider.ContactsContract.Intents.Insert 没有网站字段。还有其他方法可以传递数据吗?
您正在使用此代码从以下方法获取Android联系人列表中最后一个参数的联系人即 null
谁能告诉我如何按字母顺序对联系人列表进行排序?我通过哪个参数,所以我得到所需的输出:
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
Run Code Online (Sandbox Code Playgroud) 我知道Android 联系人选择器为我们提供了任何选定的 URI Contact
。
URI 如下所示: content://com.android.contacts/contacts/lookup/0r7-2C46324E483C324A3A484634/7
我需要获取手机中所有联系人的 URI(类似于“URI 数组”)。有人可以帮我做这件事吗?
我知道这个问题已被提出但我似乎无法通过此处的内容和其他网络资源找到对我有用的任何内容.我想根据DISPLAY NAME按字母顺序显示联系人,但是根据联系人的数量对这些联系人进行排序这里是我的代码.
public class ContactActivity extends Activity implements OnItemClickListener {
private ListView listview;
private List<ContactBean> list = new ArrayList<ContactBean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_list);
listview = (ListView) findViewById(R.id.list);
listview.setOnItemClickListener(this);
Cursor phone = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
null, null);
while (phone.moveToNext()) {
String name = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
ContactBean objContact = new ContactBean();
objContact.setName(name);
objContact.setPhoneNo(phoneNumber);
list.add(objContact);
}
phone.close();
Run Code Online (Sandbox Code Playgroud)
任何人都可以通过提前重写此代码来帮助我对联系人进行排序.
我正在尝试以编程方式启动联系人应用程序以导入包含大量联系人的大型.vcf文件.以下代码几乎完美无缺.
String vcfMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("vcf");
Intent openVcfIntent = new Intent(Intent.ACTION_VIEW);
openVcfIntent.setDataAndType(Uri.fromFile(savedVCardFile), vcfMimeType);
startActivity(openVcfIntent);
Run Code Online (Sandbox Code Playgroud)
唯一的问题是Android显示应用程序选择器对话框,不仅显示联系人应用程序,还显示Dropbox(或任何其他处理vCard文件的应用程序).我想阻止此行为并使用联系人应用程序直接打开文件,以便自动启动导入.
我在StackOverflow上尝试了几件没有运气的东西,比如设置:
openVcfIntent.setComponent(new ComponentName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity"));
openVcfIntent.setAction("android.intent.action.MAIN");
openVcfIntent.addCategory("android.intent.category.LAUNCHER");
openVcfIntent.addCategory("android.intent.category.DEFAULT");
Run Code Online (Sandbox Code Playgroud)
关于如何处理这个问题的任何想法?
android vcf-vcard import-contacts contactscontract android-contacts
任何人都可以告诉我,如果我有一个联系人列表并在我的应用程序中阅读它们,我想直接从我的应用程序设置与收藏夹的联系,这样当我再次打开手机联系时,我将能够找到最喜欢的联系人Android手机列表.
请帮忙
有没有办法以编程方式将联系人添加到内部电话通讯录中作为“电话联系人”?
我试过了:
list.add(ContentProviderOperation
.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
Run Code Online (Sandbox Code Playgroud)
使用此参数,联系人成功保存到手机,但如果我将过滤器设置为“仅显示手机联系人” - 不会显示创建的联系人。顺便说一句,我读过null
type 的联系人可能会丢失干燥帐户同步(不记得完整的案例)
然后我尝试从现有的电话联系人中检索ACCOUNT_TYPE
和ACCOUNT_NAME
获取Phone
和Local Phone Account
字符串,但是当我尝试使用相同的参数保存联系人时:
list.add(ContentProviderOperation
.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "Phone")
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "Local Phone Account")
.build());
Run Code Online (Sandbox Code Playgroud)
结果与null
type的第一种情况相同。
是否有任何常量(或者应该是另一种方式)来保存“电话联系人”等数据?
我正在获取给定时间戳后更新的联系人,我的代码是
Uri uri = ContactsContract.Contacts.CONTENT_URI;
Cursor cursor = cur = contentResolver.query(uri, null, "contact_last_updated_timestamp > ?", new String[]{timeStamp}, null);
Run Code Online (Sandbox Code Playgroud)
但光标返回给定时间戳之后未更新/删除/添加的联系人。
问题是光标返回设备联系人列表中的一些联系人。
这意味着查询错误的可能性较小。
我的问题是,为什么光标返回未更新/删除/添加的联系人?
如何获取给定时间戳后更新的联系人列表?(不使用ContentObserver)
先感谢您!
我正在逐步完成"专业Android 4应用程序开发"中的教程.在第5章中,有一个简单的应用程序,演示了如何选择联系人并打印结果.
在我进入应用程序并进行测试后,我收到以下错误:
10-06 11:29:04.596:W/ContentResolver(1073):无法获取类型:content:// contacts /(URI:content:// contacts /,调用用户:android.uid.system:1000,调用包是以下之一:[com.android.keychain,com.android.settings,android,com.android.providers.settings,com.android.inputdevices])
此字符串在以下方法中引用:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_picker_tester);
Button button = (Button) findViewById(R.id.pick_contact_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/"));
startActivityForResult(intent, PICK_CONTACT);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我想也许我做错了什么,所以我从Book源代码中运行了相应的例子并得到了同样的错误.任何想法在这里可能是错的?
android ×10
android-contacts ×10
sorting ×2
contacts ×1
java ×1
mysql ×1
rawcontacts ×1
sql ×1
vcf-vcard ×1