标签: contactscontract

为什么有些联系人会在Android上的应用程序中受到审查?

如果您尝试使用Android 2.2 Froyo附带的联系人管理器,它将允许您通过Contact ContentProvider访问sqlite数据库中的所有联系人.但是,如果您编写的应用程序不是com.android.contacts,则只能访问受限制的表,因为此处的代码如下:

http://www.google.com/codesearch/p?hl=en#cbQwy62oRIQ/res/values/unrestricted_pa​​ckages.xml&q=unrestricted_pa​​ckages&sa=N&cd=1&ct=rc

如果您尝试任何类似ContactManager或市场上的任何应用程序的示例,则无法访问完整的联系人列表,只能访问受限制的视图.

限制表似乎只包含电话号码的联系人,并排除了一些Facebook联系人.我找不到任何关于为何在开发人员文档中限制联系人的文档?

除了手动或使用自定义固件生根和打开sqlite数据库之外,还有其他解决方法吗?

android contactscontract android-2.2-froyo

5
推荐指数
1
解决办法
353
查看次数

接收联系人更改(添加,删除和更改)

每个联系人都没有时间戳吗?

我需要通过更改(添加,删除或更改)通知联系人.我已经实现了一个ContentObserver,但通过这种方法,我只能在联系人发生更改时收到通知,但我不知道哪个联系人已被修改!有什么建议?

android contacts contactscontract android-contacts contentobserver

5
推荐指数
1
解决办法
2972
查看次数

获取具有全名详细信息和电话号码的SINGLE游标

我想创建一个包含给定名称,姓氏和手机号码的Cursor.这些列不是位于ContactsContract下可用的任何容器中,我能够获得此信息的唯一方法是首先获取名称的光标,然后通过为每个联系人创建单独的光标来获取电话号码.这个解决方案迫使我将数据读取到本地数据结构,而不是仅使用光标上的适配器,并且会产生大量的性能开销(大约约5秒,带有约140个电话号码的联系人).

有没有办法创建两个游标然后加入表?或者还有其他方法吗?在过去的两天里,我一直在努力解决这个问题并阅读我在谷歌上找到的所有内容,但实际上我也无法获得任何工作.这真的不可能,或者是不是?

提前致谢!

android contactscontract

5
推荐指数
1
解决办法
145
查看次数

如何从您的应用程序(使用NFC)发送联系人并将其保存在接收设备的联系人列表中?

如何使用您自己的应用程序(并使用Android Beam)将联系人发送到另一台设备并将其保存在其联系人列表中(即默认联系人应用程序).发送设备上的联系人将由ContactsContract提供商提供.

我最好不要让其他设备运行我的应用程序.内置联系人应用程序(Android的默认应用程序)可以发送和接收联系人.因此,应该可以使用自定义应用程序将联系人发送到内置联系人应用程序.

这个问题答案表明,您可以使用VCARD格式.

目前,我的应用程序将通过电话号码搜索联系人,然后将其显示在新活动(即内置联系人应用程序)中.见下文.

Uri uri = Uri.fromParts("tel", number.getText().toString(), "");
Log.d("ContactPicker", uri.toString());
startActivity(new Intent(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT, uri));

// Example log message for the number (123)-123-1234 is "tel:(123)%20123-1234"
Run Code Online (Sandbox Code Playgroud)

我更喜欢这样做,但不要认为这是可能的,因为我无法返回找到的联系人(或者如果找不到现有的联系人,则返回创建的联系人).如果我想要发送特定联系人,我需要这些信息.

我可能需要查询所有联系人,找到我正在寻找的联系人并保存其ID.

注意:我正在使用API​​ 14


编辑

我做了一个概念证明应用程序,它执行此操作:https://github.com/dideler/HiFive

该应用程序可能是错误的.它没有维护,但欢迎拉取请求.

android nfc contactscontract android-contacts android-beam

5
推荐指数
1
解决办法
3474
查看次数

如何获得用户经常交谈的联系人?

是否可以使用ContactsContract获取用户经常交谈的联系人?

我知道我可以使用CallLog ContentProvider并尝试找出答案,但是我想知道是否已经有办法做到这一点。

android calllog contactscontract

5
推荐指数
1
解决办法
797
查看次数

即使应用程序关闭,如何获取联系人更改的通知

我的应用程序将手机上的所有联系人与服务器"同步".但是,部分要求是,如果插入,更新或删除任何联系人,则必须再次进行同步以保持数据完整性.我知道注册一个ContentObserveron ContactsContract.Contacts.CONTENT_URI,但任何这样的观察者都必须在Activity上取消注册onPause(),因此如果该应用程序当时没有运行则不会收到通知.

我也不想在服务中实现内容观察者,因为服务也不是永久性的.另外,我不喜欢24x7全天候运行的想法.

那么,有什么方法可以检测到自同步后联系人已经改变了吗?我不需要实时通知,所以只有在下次运行应用程序时才会发生此检测.

android contactscontract android-contacts contentobserver

5
推荐指数
0
解决办法
655
查看次数

Android:获取本地地址簿的所有联系人

我在我的应用程序中显示那些联系人时遇到问题,这些联系人位于我手机的地址簿中.

从谷歌联系人应用程序我发现了许多不同的版本,如何查询这些联系人:

  1. 不使用选择

    Uri uri = ContactsContract.CONTACT.CONTENT_URI;
    getActivity().getContentResolver().query(uri,PROJECTION, null, null, null);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 仅使用具有可见组= = 1的联系人

    Uri uri = ContactsContract.CONTACT.CONTENT_URI;
    String selection = Contacts.IN_VISIBLE_GROUP + "=1"
    getActivity().getContentResolver().query(uri,PROJECTION, selection, null, null);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 或者使用目录查询参数

    Uri uri = Contacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)).build();
    getActivity().getContentResolver().query(uri, PROJECTION, null, null, null);
    
    Run Code Online (Sandbox Code Playgroud)

最后一次提供最佳结果,但没有任何查询真正令人满意!:(我在不同的设备上测试了所有这些,但从来没有能够准确地获得电话簿中的联系人数量.

有人有一个想法,为什么没有查询适用于所有设备?


以下是我的测试结果:

================================================== ===============

| 设备\选择| 电话簿 | 不(1)| 可见组(2)| Directory.Default(3)|

================================================== ===============

| Galaxy S | 288             | 302 | 288                       | …

android contact-list contactscontract android-contacts

5
推荐指数
0
解决办法
829
查看次数

如何仅更新联系人而不是添加同步适配器

我的应用数据库中存储的数字很少.我想在联系人应用中匹配这些数字并更新与mimetype的联系.基本上是Whatsapp的作用.他们同步所有联系人,他们的应用程序图标联系.

我已完成同步部分,如果我添加新的联系人,那么我可以在联系人中显示我的应用程序图标.但我的要求是只更新现有联系人.

这是我试图更新联系人,

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
            .withValueBackReference(Data.RAW_CONTACT_ID,id)
            .withValue(Data.MIMETYPE, MIMETYPE)
            .withValue(Data.DATA1, "Username")
            .withValue(Data.DATA2, "Ite's Me")
            .build());

        try {
            context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

而且rawContactid我从中获取

Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI, new String[] {Data.RAW_CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.CONTACT_ID }, 
             ContactsContract.CommonDataKinds.Phone.NUMBER + "= ?", 
                     new String[] {phonenumb}, null);
Run Code Online (Sandbox Code Playgroud)

我无法在该联系人中添加连接.我究竟做错了什么.有人可以帮我这个.

提前致谢.

android contactscontract android-syncadapter android-contacts rawcontactid

5
推荐指数
1
解决办法
677
查看次数

如何显示自定义类型联系人内部联系人像WhatsApp android

/**
     * Account type id
     */
    public static final String ACCOUNT_TYPE = "com.test.app";

    /**
     * Account name
     */
    public static final String ACCOUNT_NAME = "Test";

public static void addContact(Context context, User contact) {
        ContentResolver resolver = context.getContentResolver();
        resolver.delete(RawContacts.CONTENT_URI, RawContacts.ACCOUNT_TYPE
                + " = ?", new String[] { AccountConstants.ACCOUNT_TYPE });

        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation
                .newInsert(
                        addCallerIsSyncAdapterParameter(
                                RawContacts.CONTENT_URI, true))
                .withValue(RawContacts.ACCOUNT_NAME,
                        AccountConstants.ACCOUNT_NAME)
                .withValue(RawContacts.ACCOUNT_TYPE,
                        AccountConstants.ACCOUNT_TYPE)
                // .withValue(RawContacts.SOURCE_ID, 12345)
                // .withValue(RawContacts.AGGREGATION_MODE,
                // RawContacts.AGGREGATION_MODE_DISABLED)
                .build());

        ops.add(ContentProviderOperation
                .newInsert(
                        addCallerIsSyncAdapterParameter(Settings.CONTENT_URI,
                                true))
                .withValue(RawContacts.ACCOUNT_NAME,
                        AccountConstants.ACCOUNT_NAME)
                .withValue(RawContacts.ACCOUNT_TYPE,
                        AccountConstants.ACCOUNT_TYPE)
                .withValue(Settings.UNGROUPED_VISIBLE, 1).build()); …
Run Code Online (Sandbox Code Playgroud)

android contactscontract android-contacts

5
推荐指数
1
解决办法
6643
查看次数

从android联系人中检索firstname和lastname会导致'1'和'null'

我使用下面的代码从android联系人中检索名字和姓氏.DISPLAY_NAME给出了联系人的姓名,而firstname和lastname分别返回1和null.以下是代码.

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,null, null, null);
if (cur.getCount() > 0) {
    while (cur.moveToNext()) {
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = ?", new String[] { id }, null);
                while (pCur.moveToNext()) {
                    String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    String firstname = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
                    String lastname = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
                    System.out.println("firstname and lastname" + firstname+ " "+lastname);
                    phoneNo = phoneNo.replaceAll("\\D", "");
                    names.add(name);
                    phnno.add(phoneNo);
                }
                pCur.close();
            }
        }           
    }
Run Code Online (Sandbox Code Playgroud)

当我将行cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI)更改为cr.query(ContactsContract.Data.CONTENT_URI)时,我将日志更改为 …

android contactscontract

4
推荐指数
1
解决办法
4153
查看次数