Articles of contactscontract

如何获取所有联系人姓名,姓氏,电子邮件,电话号码等,无需重复

我正在尝试使用以下代码获取手机通讯录中所有联系人的详细信息。 但面临重复值的小问题。 EDITED 实际代码开头: – private String refreshData() { String emaildata = “”; try { ContentResolver cr = getBaseContext().getContentResolver(); String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + ” = ‘” + (“1”) + “‘”; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + ” COLLATE LOCALIZED ASC”; Cursor cur = cr .query(ContactsContract.Contacts.CONTENT_URI, null, selection + ” AND ” + ContactsContract.Contacts.HAS_PHONE_NUMBER + “=1”, […]

从联系人选择器获取号码

我试图在用户从联系人选择器中选择联系人后获取联系人姓名和电话号码。 我试图使我的应用程序适用于SDK v3及以上,所以我创建了一个只调用我需要的API的抽象类。 我已经有抽象类工作(它选择了正确的API),我也有SDK v3,4的API工作。 我在使用ContactsContract工作的新API时遇到问题。 我可以获得联系人姓名,但它检索的号码始终是联系人ID之前的号码! 示例:我有两个联系人“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; 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; class NewContactsAdapterBridge extends ContactsAdapterBridge { ArrayList info = new ArrayList(); ArrayList getInfo […]

ContentObserver用于手动更新联系人

我已经从服务中注册了一个ContentObserver ,当电话有更新时,我会得到onchange()函数,如电话或联系人更新。 但我希望只在发生添加,更新或删除时调用onchange()函数。 但我不希望呼叫是传入还是传出。 那么任何人都可以告诉我哪些URI可以在contentObserver注册? 我的代码在这里 getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,new Contact_change()); 和Contact_change.java类一样 public class Contact_change extends ContentObserver{ public Contact_service() { super(null); } @Override public void onChange(boolean selfChange){ Log.i(“contact_service”,”onchange”); Super.onChange(selfChange); } @Override public boolean deliverSelfNotifications() { return true; } } 编辑: 我还有一个问题是,如果我在联系中进行了更改后停止服务,那么也会调用onchange()函数。 那么我怎么能停止它或取消注册contentobserver 。

如何在一年内检索从Google通讯录同步的联系人事件?

我正在使用下面的代码来检索事件和联系人的游标,它对于指定年份的事件工作得很好。 遗憾的是,此查询不会返回仅设置日期和月份的事件。 我已经在Google通讯录中为某些联系人生日设置了这些日期,我想知道是否需要使用RawContacts而不是ContactsContract来获取这些值? 更新 :似乎检索到没有一年进入手机的事件。 只会通过http://www.google.com/contacts添加未检索到的事件。 我可以在“联系人”应用中看到这些事件 – 显示为类似于–05-23 。 String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, Event.CONTACT_ID, Event.START_DATE, Event.TYPE }; Cursor c = mContext.getContentResolver().query( ContactsContract.Data.CONTENT_URI, projection, ContactsContract.Data.MIMETYPE + “= ?”, new String[] { Event.CONTENT_ITEM_TYPE }, Event.START_DATE); c.moveToFirst(); int nameIndex = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); int dateIndex = c.getColumnIndex(Event.START_DATE); String name, date; while (c.moveToNext()) { name = […]

如何使用一个查询搜索带地址的联系人(FORMATTED_ADDRESS)?

我尝试对用户联系人实施实时搜索,我想获取每个匹配联系人的姓名,缩略图和地址(如果有)。 用户输入时正在运行实时搜索。 所以他输入了ma并且会得到’martin’,’matthews’…… 他将继续垫子 ,只会看到’matthews’ 我尝试使用如下的单个查询来实现此目的,但我总是在FORMATTED_ADRESS字段中获取联系号码。 我想我有一个JOIN问题,因为我在同一个查询中使用ContactsContract.CommonDataKinds和ContactsContract.Contacts ? public static List getContactsForQuery(Context context, String query) { String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME, Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS }; Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; String selection = ContactsContract.Contacts.DISPLAY_NAME + ” LIKE ‘%” + query + “%'”; Cursor cursor = context.getContentResolver().query(uri, projection, selection, null,null); if (cursor.moveToFirst()) { do { String […]

如何保护我的应用程序联系人,如Facebook

当您尝试从设备检索联系人时,通常会获得除Facebook以外的所有应用程序创建的联系人。 这个问题描述了它。 那么,当我通过我的应用程序存储联系人(使用ContactsContract?)时,我需要做什么,以便其他应用程序无法通过ContactsContract来检索它…但它们仍可供设备联系人应用程序使用。或者我选择的应用程序?

获取具有types到过滤function的Android联系人,仅限特定帐户

我试图: 显示联系人列表 让用户通过键入查询来搜索它们 仅将搜索结果限制为特定的Google / Gmail帐户。 这是我为游标构建URI的方法: // User is searching for ‘jo’ String query = “jo”; Uri uri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(query)); // Restrict the query to contacts from ‘example@gmail.com’ Uri.Builder builder = uri.buildUpon(); builder.appendQueryParameter( ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(ContactsContract.Directory.DEFAULT)); builder.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_NAME, “example@gmail.com”); builder.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_TYPE, “com.google”); uri = builder.build(); 这是最终的URI: content://com.android.contacts/contacts/filter/jo?directory=0&account_name=example%40gmail.com&account_type=com.google 目前,这显示了手机上所有帐户的搜索结果。 注意:如果我使用Contacts.CONTENT_URI而不是Contacts.CONTENT_FILTER_URI ,则指定目录/帐户按预期工作,但我不能再使用“types到filter”样式搜索。 文档确实说明: 目录最重要的用例是搜索。 目录提供商预计至少支持Contacts.CONTENT_FILTER_URI 。 谁能帮助指出我可能做错了什么?

以编程方式编辑联系人的姓名/电话号码

我试图以编程方式修改联系人的显示名称: try { ArrayList ops = new ArrayList(); ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) .withSelection(ContactsContract.CommonDataKinds.Phone._ID + ” = ?”, new String[] {contact_id}) .withValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, “anything”) .build()); ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { Log.w(“UpdateContact”, e.getMessage()+””); for(StackTraceElement ste : e.getStackTrace()) { Log.w(“UpdateContact”, “\t” + ste.toString()); } Context ctx = getApplicationContext(); int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(ctx, “Update […]

在Android设备中使用ACTION_PICK意图仅显示电话号码的联系人

我的目标是只向用户显示带有电话号码的联系人,让用户选择我想在本地存储的少数联系人。 我在下面的方法中使用了各种选项来代替ContactsContract.Contacts.CONTENT_URI。 但是我收到很多联系人(很多都是垃圾邮件,只有电子邮件ID)。 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contact_selector); ((Button)findViewById(R.id.btnphonecontactlist)).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(contactIntent, 1); } }); } 如果我将ContactsContract.Contacts.CONTENT_URI作为上述方法的parameter passing,并且在下面的处理程序方法的情况下,将查询方法的String []作为投影参数(显示为注释),则该方法将失败并返回java.lang.IllegalArgumentException。 如果我在下面的方法中传递null,那么无论我选择什么联系人,我都找不到与电话号码或电子邮件相关的任何列。 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(data != null) { Uri uri […]

无法以编程方式将android联系人插入Android设备

ArrayList ops =new ArrayList(); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValue(Data.RAW_CONTACT_ID, 3) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, “999999999”) .withValue(Phone.TYPE, Phone.TYPE_CUSTOM) .withValue(Phone.DISPLAY_NAME, “hhhhhhh”) .withValue(ContactsContract.CommonDataKinds.Email.DATA, “abcd@gmail.com”) .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValue(Data.RAW_CONTACT_ID, 4) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, “999999999”) .withValue(Phone.TYPE, Phone.TYPE_CUSTOM) .withValue(Phone.DISPLAY_NAME, “hhhlllllllllll”) .withValue(ContactsContract.CommonDataKinds.Email.DATA, “efgh@gmail.com”) .build()); try { cr.applyBatch(ContactsContract.AUTHORITY, ops); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (OperationApplicationException e) { // TODO Auto-generated […]