我想知道联系人详细信息以哪种格式存储在Android手机或模拟器中.如果有任何机构知道答案,请帮助我.
可能重复:
如何在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权限.请帮我 ............
android为每个联系人分配唯一的常量ID吗?
如果没有,有没有办法将这些信息分配给他们?我可以将此ID同步到谷歌联系人吗?
谢谢.
从传入短信中检索移动号码时,会附加国家/地区代码.
现在,因为数据库中的匹配联系人可能不包含国家代码来获取我正在使用的联系人姓名:
public static String getContactName(String number, Context context) {
try {
Uri personUri = Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim()));
String selection = PhoneLookup.NUMBER + " LIKE %" + number.trim() + "%";
Cursor cur = context.getContentResolver().query(personUri,
new String[] {
PhoneLookup.DISPLAY_NAME
},
selection, null, null);
if (cur.moveToFirst()) {
String str = cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
cur.close();
return str;
}
} catch (Exception e) {
//e.printStackTrace();
return number;
}
return number;
}
Run Code Online (Sandbox Code Playgroud)
如果我传入完全匹配或部分匹配,这将完美地工作.但是,如果我想获取联系人ID我正在使用此代码:
public static Contact getContact(String number, ContentResolver contentResolver) {
Contact contact = new Contact(-1, number); …
Run Code Online (Sandbox Code Playgroud) 是否有可能处理预付费用户收到的通话费对话中显示的数据.我想在我的sqlite数据库中保存所有余额减少以及呼叫持续时间.
您好我想从我们的默认联系簿意图中选择一个联系人.我尝试了几种方法来做到这一点.请在下面找到代码.所有这些代码的问题在于,他们打开一个中间文档屏幕,用户必须选择联系人,而不是打开联系簿.
private void openContactIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, ContactsContract.Contacts.CONTENT_URI);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, REQ_CONTACT_DIRECTORY);
}
Run Code Online (Sandbox Code Playgroud)
我也试过了
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
Run Code Online (Sandbox Code Playgroud)
和
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(intent, PICK_CONTACT);
Run Code Online (Sandbox Code Playgroud)
android android-intent android-contacts android-implicit-intent contactpicker
我目前正在编写一个允许保存草稿的应用程序(使用android版本> = 2.0).每个草案都通过联系人与联系人联系ContactsContract.Contacts.LOOKUP_KEY
.我的问题是,如果我更改联系人的姓名,查找键也会更改.这是这样的吗?
那么我需要一个查找键呢?我认为查找键永远不会改变,现在它无论如何都会改变.我对这种行为感到困惑......
有人可以向我解释如何永久链接到联系人吗?我应该使用ID而不是查找键吗?
提前致谢.
我正在尝试为他选择的每个联系人编写一个为用户存储数据的应用程序.我想向每个用户添加一个custom provider
(像facebook一样),按下它将打开我的应用程序并允许用户查看存储的数据.我按照本指南创建了一个自定义提供程序:http:
//www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/
但是custom provider
没有出现在我的联系人列表中,我试图改变我MIME_TYPE
的vnd.com.google.cursor.item/contact_user_defined_field
那个也没有帮助(当使用第三方应用时它显示我的提供者但没有我的图标)
我的联系定义是这样的:
<ContactsSource xmlns:android="http://schemas.android.com/apk/res/android">
<ContactsDataKind
android:icon="@drawable/ic_launcher"
android:mimeType="vnd.android.cursor.item/vnd.MyPackageName.profile"
android:summaryColumn="data2"
android:detailColumn="data3"
android:detailSocialSummary="true" />
</ContactsSource>
Run Code Online (Sandbox Code Playgroud)
我的相关代码是这样的:
String MIME_TYPE "vnd.android.cursor.item/vnd.MyPackageName.profile";
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex =ops.size();//(int)Contact_RAW_ID;
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME,null )
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, "9X-XXXXXXXXX")
.build());
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, "John Doe")
.build());
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,Email.CONTENT_ITEM_TYPE)
.withValue(Email.ADDRESS, "John Doe")
.build());
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, "1234567890")
.build());
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,MIME_TYPE)
.withValue(Data.DATA1, "Custom …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用联系人的电子邮件ID.为此,我使用Cursor Loader.有一个问题我也得到重复的电子邮件ID.如何删除电子邮件重复项.我应该使用原始查询"SELECT DISTINCT"而不是使用CursorLoader还是有其他解决方案?
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.DATA};
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP +"='1' AND " + Email.DATA +" IS NOT NULL AND " + Email.DATA +" != \"\" " ;
//showing only visible contacts
String[] selectionArgs = null;
return new CursorLoader(this, ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection, selection, selectionArgs, sortOrder);
}
Run Code Online (Sandbox Code Playgroud) 这似乎适用于小图像:
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, id);
values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
if (photoRow >= 0) {
context.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + photoRow, null);
} else {
context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}
Run Code Online (Sandbox Code Playgroud)
从文档我意识到,对于大图像我需要设置PHOTO_FILE_ID,所以我可以替换:
ContactsContract.CommonDataKinds.Photo.PHOTO
Run Code Online (Sandbox Code Playgroud)
有:
ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID
Run Code Online (Sandbox Code Playgroud)
但是,我需要提供PHOTO_FILE_ID而不是原始数据.我的问题: