我想为应用中的联系人加载联系人照片,我知道如何做到这一点,因为有很多教程要做.但这些方法(股票机器人)似乎无法撤回第三方同步的照片我想知道是否有一个坚实可靠的方式来本地做这个.
这已被问过很多次了,我可以把答案放在左边和右边.唯一的问题是它们实际上并没有解决问题.只创造解决方案.
经过一番广泛的搜索,我发现了这个:
android中有一个错误,阻止我们检索联系人照片(几乎所有丢失的联系人照片都是facebook个人资料照片).要解决此问题,我们必须通过共享证书对APK进行签名,并强制应用在shared-uid中运行.
我在https://sites.google.com/site/t2k269group/development-diary/load-contact-photo上发现了这个问题,任何人都可以详细说明如何使用共享密钥进行签名,如果这样可行的话?
如果其他任何人真的有一个可靠的解决方案加载联系人照片,无论他们同步什么.
问题:是否有可靠的方法来加载包含同步照片的联系人照片,而不仅仅是手机上设置的照片?
提前致谢.干杯,克里斯
我目前正在使用Android联系人内容提供商,目前可以使用以下代码访问联系人完整显示名称而不会出现问题:
String[] PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
String SELECTION = "LOWER(" + ContactsContract.Contacts.DISPLAY_NAME + ")"
+ " LIKE '" + constraint + "%' " + "and " +
ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
Cursor cur = managedQuery(ContactsContract.Contacts.CONTENT_URI,
PROJECTION, SELECTION, null, sortOrder);
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够分别获得联系人名字和姓氏,我试图使用StructuredName试图获得这个,但我似乎无法让它工作.
任何人都可以指出我正确的方向如何正确使用StructuredName将名称拆分为First和Last?
更新:
根据hovanessyan的建议,我尝试了以下方法:
String[] PROJECTION = new String[] {
ContactsContract.Data._ID,
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.Data.HAS_PHONE_NUMBER,
};
String SELECTION = ContactsContract.CommonDataKinds.StructuredName.IN_VISIBLE_GROUP + " = '1'";
String sortOrder = ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我需要为用户提供查看/编辑ContactsContract的所有可用字段的机会.
我应该如何获取/查看所有可用字段 - 包括任何自定义字段?
我想检查新权限模型的工作原理,所以在应用程序的设置中我禁用了Contacts.然后我去app并尝试阅读Contacts...它有点工作:
try {
Uri result = data.getData();
int contentIdx;
cursor = getContentResolver().query(result, null, null, null, null);
contentIdx = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
if(cursor.moveToFirst()) {
content = cursor.getInt(contentIdx);
}
if(content > 0) {
contentIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
if(cursor.moveToFirst()) {
name = cursor.getString(contentIdx);
}
contentIdx = cursor.getColumnIndex(BaseColumns._ID);
if(cursor.moveToFirst()) {
content = cursor.getLong(contentIdx);
}
cursor = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[] { Phone.NUMBER }, Data.CONTACT_ID + "=?", new String[] { String.valueOf(content) }, null);
if(cursor.moveToFirst()) {
number = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
}
}
} catch (Exception e) { …Run Code Online (Sandbox Code Playgroud) android android-contacts android-permissions android-6.0-marshmallow
如何在Android 上注册监听任何联系人(添加/删除联系人,更改电子邮件/电话)的更改?
谢谢.
在查询联系人数据时,我得到了大部分工作.我正在与StructuredName和Organization斗争.他们不适合我.
如果您不介意,请查看代码.它是手工制作的,并且删除了大量错误检查,以使其尽可能小地在此处发布."不工作"的评论是对我不起作用的部分.
两个前导if()是onActivityResult的一部分,我在联系人选择结束时收到数据.通过以下方式拨打电话:
intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, Main.DIALOG_PICKCONTACT);
Run Code Online (Sandbox Code Playgroud)
非常感谢HJW
if (requestCode == Main.DIALOG_PICKCONTACT) {
if (resultCode == RESULT_OK) {
int i;
String s;
Cursor cursorContacts = managedQuery(intent.getData(),
null,
null,
null,
null);
if (cursorContacts != null) {
if (cursorContacts.moveToNext()) {
ContentResolver contentResolver = getContentResolver();
String contactId = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts._ID));
i = cursorContacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
// cursorContacts.getString(i); *** is DISPLAY_NAME
Cursor cursorEmail = contentResolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[] { contactId },
null);
if (cursorEmail != null) {
while …Run Code Online (Sandbox Code Playgroud) 我想在联系人应用程序中使用fastscroll和albhabet索引器实现ListView.我正在使用SimpleAdapter来填充ListView.从图像中可以看出,通过从右侧的字母索引器中选择一个字母,listView选项将转到相应的ListItem.怎么做到这一点?请帮忙.

我试图从通话记录中获取联系人.我可以使用以下代码从主要联系人处获取联系电话:
public void getContacts(View view) {
Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intentContact, 0);
}
public void onActivityResult(int requestCode, int resultCode, Intent intent)
{
if (requestCode == 0)
{
try {
to.setText(getContactInfo(intent));
} catch(NullPointerException e) {
// Do nothing ;)
}
}
}
protected String getContactInfo(Intent intent)
{
String phoneNumber = to.getText().toString();
Cursor cursor = managedQuery(intent.getData(), null, null, null, null);
while (cursor.moveToNext())
{
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
if(phoneNumber.endsWith(">"))
phoneNumber += ", "+name;
else
phoneNumber += name; …Run Code Online (Sandbox Code Playgroud) 我想添加一个新的联系人ContactsContract.Intents.Insert.但问题是我不知道有多少电话号码.当我明白我可以使用只传递三个电话号码PHONE,SECONDARY_PHONE,TERTIARY_PHONE常量.有没有办法传递三个以上的数字?