2016-05-09 3 views
3

Я делаю приложение, в котором пользователь может добавлять пользователей из приложения в свои контакты.Добавление контакта с использованием намерения в Android

Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION); 
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE); 
intent.putExtra(ContactsContract.Intents.Insert.PHONE, bean.getMobileNo()); 
intent.putExtra(ContactsContract.Intents.Insert.NAME, bean.getName()); 
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, bean.getEmailID()); 
startActivity(intent); 

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

Я хочу сделать это с помощью намерения только не через приложение. Есть ли какое-либо решение для этого или оно специфично для устройства?

+0

@Shailesh Требование добавления контакта от намерения, я могу добавить контакт из приложения –

+1

, ваш код в порядке, без проблем в коде какое-то устройство по умолчанию, связанное с приложением, сделало это, когда вы нажмете кнопку «Назад», и какое-то приложение спросит вы отбрасываете или сохраняете. –

ответ

0

Попробуйте это,

// Declare 
static final int PICK_CONTACT = 1; 

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 

startActivityForResult(intent, PICK_CONTACT); 

//code 
@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 

    switch (reqCode) { 
     case (PICK_CONTACT): 
      if (resultCode == Activity.RESULT_OK) { 

       Uri contactData = data.getData(); 
       Cursor c = managedQuery(contactData, null, null, null, null); 
       if (c.moveToFirst()) { 
        String id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

        String hasPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

        if (hasPhone.equalsIgnoreCase("1")) { 
         Cursor phones = getContentResolver().query(
           ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
           ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, 
           null, null); 
         phones.moveToFirst(); 
         cNumber = phones.getString(phones.getColumnIndex("data1")); 
         System.out.println("number is:" + cNumber); 
        } 
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 


       } 
      } 
      break; 
    } 
} 

Это может поможет.

+0

@Satish Приведенный выше код поможет мне получить контакт от моих контактов, не так ли. –

3

Попробуйте

/** * Откройте экран надстройки контакта с предварительно заполненной информацией */

Intent intent = new Intent(Intent.ACTION_INSERT); 
intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 

intent.putExtra(ContactsContract.Intents.Insert.NAME, bean.getName()); 
intent.putExtra(ContactsContract.Intents.Insert.PHONE, bean.getMobileNo()); 
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, bean.getEmailID()); 

context.startActivity(intent); 
+0

Это не работало для меня. Сохраняет контакт при нажатии. –

+0

@HarshadPawar Нет проблем с этим кодом на устройствах Nexus 7 и HTC, могу ли я узнать, какое устройство вы использовали для тестирования? – Shailesh

+0

У меня есть opo с 6.0, opo с 5.1.1, lg g4, samsung s5, примечание 5, S6, из которых opo с 5.1.1, s5 и lg g4 сохраняет непосредственно. –

0

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

Как я уже заметил, вы уже звоните startActivity(intent), что экономит контакт. Запускайте только startActivity(intent), если пользователь уже одобрил/подтвердил, что хочет добавить контакт. Я предлагаю использовать Dialog для подтверждения. Если пользователь принимает, запустите startActivity(intent), если нет, то просто проигнорируйте действие. Как так:

 if (true){ // user accepts 
      Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION); 
      intent.setType(ContactsContract.RawContacts.CONTENT_TYPE); 
      intent.putExtra(ContactsContract.Intents.Insert.PHONE, bean.getMobileNo()); 
      intent.putExtra(ContactsContract.Intents.Insert.NAME, bean.getName()); 
      intent.putExtra(ContactsContract.Intents.Insert.EMAIL, bean.getEmailID()); 
      startActivity(intent); 
     } else { 
      // your code here. 
     } 

Я думаю, что это post также может быть полезным для вас. Ура! : D

+0

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

+0

Это странно. Даже если вы используете сообщение, которое я связываю? Использование 'ContentResolver'? –

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