0

Мне нужно создать метод, который добавит контакты в список контактов телефона. Следуя советам многих различных постов, я придумал эту схему:Добавление нового контакта не удается

  private void addContact() { 

       mContentValues = new ContentValues(); 
       mContentResolver = getContentResolver(); 
       mUri = Uri.parse("content://com.android.contacts/raw_contacts"); 
       long id = ContentUris.parseId(mContentResolver.insert(mUri, mContentValues)); 
       mUri = Uri.parse("content://com.android.contacts/data"); 
       mContentValues.put(ContactsContract.Data.RAW_CONTACT_ID, id); 
       mContentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 

       mContentValues.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, mDisplayedName); 
       mContentValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, person.getFirstName()); 
       mContentValues.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, person.getLastName()); 

       mContentValues.put(ContactsContract.CommonDataKinds.Email.ADDRESS, person.getEmail()); 

       mContentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, mFinalPhoneNumber); 

       mContentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, person.getStreetAddress()); 
       mContentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, person.getCity()); 
       mContentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, person.getState()); 
       mContentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, person.getZipCode()); 

mContentValues.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME); 
        mContentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME); 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 
        requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS}, PERMISSIONS_REQUEST_WRITE_CONTACTS); 
       } else { 
        addContact(); 
       } 
      } 

      @Override 
      public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 

       switch (requestCode) { 

        case PERMISSIONS_REQUEST_WRITE_CONTACTS: 
         if (grantResults.length > 0 &&grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
          addContact(); 
         } else { 
          Toast.makeText(this, "Insufficient permissions", Toast.LENGTH_SHORT).show(); 
         } 
       } 
      } 

      private void addContact() { 

       if (mContentValues == null) 
        return; 

       Uri uri = mContentResolver.insert(mUri, mContentValues); 

       if (uri == null) 
        Log.d(TAG, "didnt work"); 
      } 

Это выполняется до завершения без ошибок, предупреждений или вывода на консоль. Но контакт никогда не добавляется. Я думаю, что, скорее всего, это пошло не так, это назначить идентификатор исходного контакта на ранней стадии, но это всего лишь предположение.

Может ли кто-нибудь увидеть, что я делаю неправильно? Благодаря!

ответ

0

Попробуйте изменить так:

Uri uri = getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, mContentValues); 
+0

Спасибо за предложение, но он не работает. – Alex

Смежные вопросы