【问题标题】:Adding Contact using Intent in Android在 Android 中使用 Intent 添加联系人
【发布时间】:2016-05-10 16:46:53
【问题描述】:

我正在制作一个应用程序,用户可以在其中将应用程序中的用户添加到他的联系人中。

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);

所以添加它不是问题,当它去添加联系人屏幕时,如果用户按下返回按钮,即使用户不想保存联系人,联系人也会被保存。

我只想使用 Intent 而不是通过应用程序来执行此操作。是否有任何解决方案或者它是特定于设备的?

【问题讨论】:

  • @Shailesh 添加联系人的要求是intent,我可以从app添加联系人
  • 您的代码是正确的,代码没有问题,当您按下返回按钮时,某些设备默认联系人应用程序会这样做,并且某些应用程序会要求您丢弃或保存。

标签: android


【解决方案1】:

试试这个

/** * 使用预先填写的信息打开添加联系人屏幕 */

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);

【讨论】:

  • 这对我不起作用。按下后仍会保存联系人。
  • @HarshadPawar 此代码在 Nexus 7 和 HTC 设备上没有问题,我可以知道您使用哪种设备进行测试吗?
  • 我有 6.0 的 opo,5.1.1 的 opo,lg g4,samsung s5,note 5,S6,其中直接保存了 5.1.1,s5,lg g4 的 opo。跨度>
【解决方案2】:

试试这个,

// 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;
    }
}

这可能会对你有所帮助。

【讨论】:

  • @Satish 上面的代码将帮助我从我的联系人中获取联系人不是吗。
【解决方案3】:

如果我正确理解您的帖子,问题是无论用户是否要添加联系人,都会添加联系人信息。

我注意到,您已经拨打了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

【讨论】:

  • 是的,这可能是一个案例。但是在手机中,当我按下它时,它会确认丢弃,而在某些手机中,它会直接保存联系人。
  • 这很奇怪。即使您使用我链接的帖子?使用ContentResolver ?
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2016-02-26
  • 1970-01-01
相关资源
最近更新 更多