我正在弄乱以下代码,使其在所有设备上运行。 幸运的是,它在LG Nexus 5(Android 6.0.1)
上运行得非常好我正在尝试索尼Xperia D6503(Android 6.0.1)的相同代码。 但它不起作用。
private void addContactUsingIntent() {
Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
intent.putExtra(INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
//ContactsListActivity.this.startActivityForResult(intent, INSERT_CONTACT_REQUEST);
startActivityForResult(intent, INSERT_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == INSERT_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
Uri contactData = data.getData();
Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
if (cursor.moveToFirst()) {
long newId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String email = getEmail(String.valueOf(newId));
ArrayList<String> phones = new ArrayList<>();
Cursor cPhones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{String.valueOf(newId)}, null);
while (cPhones.moveToNext()) {
phones.add(cPhones.getString(cPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
}
cursor.close();
cPhones.close();
Uri photoUri = getPhotoUri(newId);
Log.i("Photo URI", photoUri.toString());
updateViews(newId, name, phones, email, photoUri);
}
}
}
}
请查看上面的代码,如果我做错了,请告诉我。
在LG Nexus 5设备上,当我的应用程序调用{{1}}时,设备的默认联系人应用程序将打开。用户保存联系后,我addContactUsingIntent
会收到data
。在Sony Xperia设备上,还会打开用于添加联系人的默认联系人屏幕,但在用户保存后,它会显示新添加的联系人,然后用户必须手动按回以返回到我的应用程序。这样做,当onActivityResult
resultCode onActivityResult" is called, it comes back with data as null and
- 1`时,显然不是这种情况。
我也尝试过以下解决方案,但它不适用于此设备。 Add contact intent doesn't return data onActivityResult under ICS
非常感谢任何使其成功的建议。
由于
P.S 即可。我也在Oppo F3 Plus(Android 6.0.1)上测试了这个代码,它的工作非常好。
答案 0 :(得分:0)
问题在于您的Sony XPERIA设备上的Intent
即将推出的应用。他们显然没有很好地测试ACTION_INSERT
(尽管您的INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED
不是Android SDK的一部分,很可能会被忽略)。
但是,除非您是索尼员工并且可以以某种方式修复其联系人应用中的错误,否则您无法做到这一点。