对于某些Android设备,“添加联系人”不会在ActivityResult方法上返回数据

对于某些Android设备,“添加联系人”不会在ActivityResult方法上返回数据,android,android-intent,contact,onactivityresult,Android,Android Intent,Contact,Onactivityresult,为了让它在所有设备上运行,我正在修改以下代码。 幸运的是,它在LG Nexus 5(Android 6.0.1)上运行得非常好 我在Sony Xperia D6503(Android 6.0.1)上尝试的同一段代码。 但它不起作用 private void addContactUsingIntent() { Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI)

为了让它在所有设备上运行,我正在修改以下代码。 幸运的是,它在LG Nexus 5(Android 6.0.1)上运行得非常好

我在Sony 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);
                }
            }
        }
    }
private void addcontactusingcontent(){
意向意向=新意向(Intent.ACTION\u INSERT,Contacts contract.Contacts.CONTENT\u URI);
intent.setType(Contacts contract.Contacts.CONTENT\u TYPE);
intent.putExtra(intent\u KEY\u FINISH\u ACTIVITY\u ON\u SAVE\u COMPLETED,true);
//ContactsStactivity.this.startActivityForResult(意图,插入联系人请求);
startActivityForResult(意向,插入联系人请求);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(requestCode==插入\联系\请求){
if(resultCode==RESULT\u OK){
Uri contactData=data.getData();
Cursor Cursor=getContentResolver().query(contactData,null,null,null);
if(cursor.moveToFirst()){
long newId=cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.\u ID));
字符串名称=cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_name));
String email=getEmail(String.valueOf(newId));
ArrayList phones=新的ArrayList();
游标cPhones=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
无效的
ContactsContract.CommonDataTypes.Phone.CONTACT_ID+“=?”,
新字符串[]{String.valueOf(newId)},null);
while(cPhones.moveToNext()){
add(cPhones.getString(cPhones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
}
cursor.close();
cPhones.close();
Uri photoUri=getPhotoUri(newId);
Log.i(“photoUri”,photoUri.toString());
更新新闻(newId、姓名、电话、电子邮件、photoUri);
}
}
}
}
请看一下上面的代码,如果我做错了什么,请告诉我

在LG Nexus 5设备上,当我的应用程序调用
addContactUsingContent
时,设备的默认联系人应用程序将打开。一旦用户保存了联系人,我就会在
onActivityResult
中获取
数据。在Sony Xperia设备上,添加联系人的默认联系人屏幕也会打开,但在用户保存后,它会显示新添加的联系人,然后用户必须手动按back返回到我的应用程序。这样做,当调用
onActivityResult”时,它返回的数据为null,而
resultCode
-1`,情况显然不是这样

我也尝试过以下解决方案,但在这个设备上不起作用。

如有任何建议,我们将不胜感激

谢谢


p.S。我也在Oppo F3 Plus(Android 6.0.1)上测试了这段代码,它运行得非常好。

问题在于在索尼XPERIA设备上为您的
意图推出的应用程序。他们显然没有很好地测试
ACTION\u INSERT
(虽然您的
意图\u键\u完成\u活动\u保存\u完成
不是Android SDK的一部分,可能会被忽略)


但是,你对此无能为力,除非你是一名索尼员工,并且能够以某种方式修复他们联系人应用程序中的错误。

那么我如何确保此代码在所有Android设备上运行?有任何线索吗?感谢你的迅速回复。@TravoltaJohn:“我如何确保此代码在所有Android设备上运行?”?“--你不能。每当你与其他人的应用程序集成时,总有可能另一个应用程序有漏洞。要么接受其他应用程序不可靠的事实,要么不与其他应用程序集成。