我正在尝试直接向Android 2.2联系人添加新联系人.
//this code doesn't work
ContentValues cv=new ContentValues();
cv.put(ContactsContract.Contacts.DISPLAY_NAME, "TESTEST");
Uri u= getContentResolver().insert(ContactsContract.Contacts.CONTENT_URI, cv);
Run Code Online (Sandbox Code Playgroud)
给我错误"自动创建聚合联系人".我究竟做错了什么?
这会调用Android的添加联系人表单:
//this code works but it's not ideal
Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
i.setType(Contacts.CONTENT_ITEM_TYPE);
i.putExtra(Insert.NAME, "TESTTEST");
i.putExtra(Insert.PHONE, "209384");
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何发送它的名字和姓氏 - 它只是一个'名字',它放在名字框中.此外,我想将邮政编码分为街道,城市,州和邮政编码,现在这些都被放入街道邮箱.
android contacts android-intent contactscontract android-activity
我想要的是隐藏联系人列表中的联系人.所以为了实现这一点,我尝试了很多并搜索了很多.最后,我知道我们可以生成一个不可见的组,我们可以将联系人分配给该组,以便联系人不可见.
我试过了,但没有成功.即使我设置了s 的GROUP_VISIBLE
字段ContactsContact.Group
,我也无法使我的组隐形.
这就是我试图创建一个不可见的组:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Groups.CONTENT_URI)
.withValue(ContactsContract.Groups.GROUP_VISIBLE, 0)
.withValue(ContactsContract.Groups.TITLE, "InViGroup").build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
Log.e("Error", e.toString());
}
Run Code Online (Sandbox Code Playgroud)
我可以向此群组添加联系人,但联系人在电话簿或联系人列表中可见.
我的主要目标是隐藏联系人列表中的联系人.有任何想法吗?如何使我选择的联系人隐身?
我想阅读来自ContactsContract API的联系人,这些联系人只属于手机/ SIM卡,并希望避免与其他应用程序(如facebook和gmail)同步的联系人.我在模拟器上测试了我的代码并且它工作正常,但在真实设备上它不会返回任何结果.
ContentResolver cr = AndroidContext.getContext()
.getContentResolver();
Cursor nativeContacts = cr.query(RawContacts.CONTENT_URI,
new String[] { RawContacts._ID, RawContacts.VERSION, RawContacts.CONTACT_ID },
RawContacts.DELETED + "<> 1 AND " + RawContacts.CONTACT_ID
+ " IS NOT NULL AND " + RawContacts.ACCOUNT_NAME + " IS NULL AND "
+ RawContacts.ACCOUNT_TYPE + " IS NULL", null, null);
Run Code Online (Sandbox Code Playgroud)
我想在设备上默认帐户的帐户类型和名称不为空,解决方案是什么?
我正在开发Android Honeycomb(v3.0)应用程序,该应用程序需要显示存储在设备上注册的Google帐户中的所有联系人.我遇到的一个问题是,我只能检索"我的联系人","Android中已加星标"和"其他联系人"中可用的联系人.我还希望能够从"目录"中检索联系人.我认为"目录"部分是Google向希望向其他人提供其域内所有成员/员工目录的组织和公司提供的功能.请看下面的截图:
到目前为止,我的清单文件中有以下行:
<uses-permission android:name="android.permission.READ_CONTACTS" />
Run Code Online (Sandbox Code Playgroud)
我试过使用这段代码:
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
在我的情况下,"我的联系人"和"在Android中加星标"是空的.但是,获得了"其他联系人"中的(1)联系人.但是,"目录"包含数百个未检索的联系人.
我的问题:有没有办法确保检索"目录"中的联系人?我知道我可以简单地使用网络浏览器复制联系人,然后将它们同步到设备,但如果新的联系人被添加到"目录",我必须每次都手动执行此操作,所以这不是对我来说很棒的选择.请指教.
android google-contacts-api contactscontract android-contacts android-3.0-honeycomb
有许多Q&A线程,但没有一个提供真正的答案,或者我找不到它.
为了确保你,我先问了一下:
那么有谁知道如何使用Intent(如示例代码中)并插入一个Photo,它是在Bitmap中保存的?
示例代码我现在用它来启动对话意图,让用户在保存之前插入或取消并可能编辑字段:
// PrivateContactClass c;
// Bitmap photo;
Intent inOrUp = new Intent(ContactsContract.Intents.Insert.ACTION, ContactsContract.Contacts.CONTENT_URI);
inOrUp.setType(ContactsContract.Contacts.CONTENT_TYPE);
inOrUp.putExtra(ContactsContract.Intents.Insert.NAME, ModelUtils.formatName(c));
inOrUp.putExtra(ContactsContract.Intents.Insert.PHONE, getPrimaryPhone());
inOrUp.putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE, c.getMobile());
inOrUp.putExtra(ContactsContract.Intents.Insert.EMAIL, c.getMail());
inOrUp.putExtra(ContactsContract.Intents.Insert.JOB_TITLE, c.getFunction());
inOrUp.putExtra(ContactsContract.Intents.Insert.NOTES, getSummary());
inOrUp.putExtra(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
startActivity(inOrUp);
Run Code Online (Sandbox Code Playgroud)
不仅仅使用intent,因为我怀疑我们可以传递Data ContentProvider保存的图像ID,或者直接在Intent中传递Bitmap.
从上面的代码扩展
// must be declared in class-context
private static final int CONTACT_SAVE_INTENT_REQUEST = 1;
...
startActivityForResult(inOrUp,CONTACT_SAVE_INTENT_REQUEST);
Run Code Online (Sandbox Code Playgroud)
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
super.onActivityResult(requestCode, resultCode, intent); …
Run Code Online (Sandbox Code Playgroud) android android-intent contactscontract android-image android-contentprovider
我想尝试在Android 2.1上的现有联系人添加电话号码.我目前正在使用:
ContentValues values = new ContentValues();
values.put(Phone.RAW_CONTACT_ID,cursor.getColumnIndex(Phone.CONTACT_ID));
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, selection, null,ContactsContract.Contacts.DISPLAY_NAME+" COLLATE LOCALIZED ASC");
if (cursor.getCount() > 0) {
cursor.moveToPosition(oldcontactid);
contactid = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
values.put(Phone.RAW_CONTACT_ID,cursor.getColumnIndex(Phone.CONTACT_ID));
if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{contactid}, null);
while (pCur.moveToNext()) {
values.put(Phone.NUMBER,pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
}
pCur.close();
}
}
Uri uri = getContentResolver().insert(Phone.CONTENT_URI, values);
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
java.lang.UnsupportedOperationException: Unknown uri: content://com.android.contacts/data/phones
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个问题?
感谢任何帮助,ng93
可能重复:
如何在android中添加新联系人
public boolean createContact(String name, String number, String email)
{
boolean success = true;
try
{
ContentValues contentValues = new ContentValues();
ContentResolver contentResolver = getContentResolver();
contentValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
contentValues.put(Phone.NUMBER, "123254");
Uri uri = contentResolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, contentValues);
if(uri==null)
{
success = false;
}
}
catch (Exception e)
{
e.printStackTrace();
success = false;
}
return success;
}
Run Code Online (Sandbox Code Playgroud)
我得到NullPointer异常我不知道为什么我还指定了WRITE_CONTACTS权限.请帮我 ............
我正在尝试为我的应用程序制作多个联系人选择器.我正在使用带复选框的自定义布局来选择多个联系人.我面临的问题是,为了选择任何特定的联系人,我需要在复选框上完全点击,如果我点击该行的其他部分,则复选框不会被勾选.如何确保用户在整行中单击的位置勾选复选框.
activity_contacts_picker.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/btnShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Selected" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btnShow" >
</ListView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
custcontactview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="5.0px"
android:paddingLeft="5.0px"
android:paddingTop="5.0px" >
<TextView
android:id="@+id/txtContactName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15.0dip"
android:layout_toLeftOf="@+id/checkBox1"
android:layout_alignParentLeft="true"
android:text="Medium Text"
android:textAppearance="?android:textAppearanceMedium" />
<TextView
android:id="@+id/txtContactNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtContactName"
android:layout_alignParentLeft="true"
android:layout_marginLeft="15.0dip"
android:layout_toLeftOf="@+id/checkBox1"
android:text="Small Text"
android:textAppearance="?android:textAppearanceSmall" />
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="false" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
ContactsPicker.java
public class ContactsPicker extends ListActivity {
protected Object mActionMode; …
Run Code Online (Sandbox Code Playgroud) 我是唯一一个试图实现这一目标的人......:/?
简而言之:
我想取回我的联系人的图片,因为他们自己定义了(例如在他们自己的Google帐户页面上).
使用案例:我自己修改了一个联系人的图片,现在,我想要撤消这个更改 - >我想'取回'我的联系人的谷歌图片(由他/她自己设置).
我有一个管理Google通讯录的应用.它还使用管理联系人照片
ContactsContract.CommonDataKinds.Photo.PHOTO
它工作正常.
这是我想支持的场景:
请在这里查看我的代码来设置照片.我应该"清除"照片并依靠ContactProvider从Google帐户下载用户照片吗?
如何清除照片.将ContactsContract.CommonDataKinds.Photo.PHOTO设置为'null'?并删除相关文件,即
Uri rawContactPhotoUri = Uri.withAppendedPath(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), RawContacts.DisplayPhoto.CONTENT_DIRECTORY)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
以下是我更新图片的方式:
private void updatePhotoThumbnail(Bitmap bitmap, Contact contact) throws Exception
{
byte[] contactPhotoBytes = getContactPhotoBytes(bitmap);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
// @formatter:off
String where = ContactsContract.RawContacts.ACCOUNT_NAME + "= ? "
+ "AND " + ContactsContract.RawContacts.ACCOUNT_TYPE + "= ? "
+ "AND " + ContactsContract.Data.CONTACT_ID + "= ? "
+ "AND " + ContactsContract.Data.RAW_CONTACT_ID + "= ? …
Run Code Online (Sandbox Code Playgroud) 目前,我在我的应用程序中显示手机的所有联系人作为自定义回收站视图.到目前为止,我在列表项视图中显示联系人的姓名,手机号码和个人资料图片,但我需要获取该联系人的所有信息,并在自定义详细信息页面中单击我的应用程序的列表项时显示该信息.
对于每个联系人,可以使用不同的信息集,例如我收到的电子邮件很少,但很少有联系人不存在.
我的问题是
如何获取给定联系人的所有信息而不会错过任何一个位.是否有一个结构可以遍历并检查每个键的值?
此外,当我在我的应用列表中填充系统联系人时,我在列表中多次找到相同的联系人.我认为这是因为在我的设备的帐户管理器中,许多帐户都注册了相同的号码,例如whatsapp,gmail.如果是这样,如何在我的列表中只显示该号码一次.
android android-contentresolver contactscontract android-contentprovider