将电话号码或CONTACT_ID从android联系人详细信息传递到活动(类似whatsapp)

时间:2019-05-21 12:25:21

标签: java android android-contacts

我要实现的目的是在android图书联系方式中为我的应用添加快捷方式,类似于whatsapp在做什么。

我一直遵循以下指导原则:http://blogs.quovantis.com/syncing-contacts-with-an-android-application-2/,并且效果很好,但是作者没有展示如何将数据从联系人详细信息传递给ViewingActivity:https://github.com/ajkh35/ContactsDemo/blob/master/app/src/main/java/com/example/ajay/contacts_4/ViewingActivity.java

文章下方有一些评论,但作者未提供具体答案,找不到任何有用的

    Uri data = getIntent().getData(); //content://com.android.contacts/data/1169
    List<String> params = data.getPathSegments();
    String first = params.get(0); 
    String second = params.get(1);

在第二个参数中传递了一些数字,但不是CONTACT_ID或RAW_CONTACT_ID。有帮助吗?

2 个答案:

答案 0 :(得分:0)

好吧,看来您从Uri应用中获得的Contacts是一个Data uri。

Data行包含有关特定RawContact的特定数据项(例如电话号码或电子邮件)的信息,因此,单个Data行“属于”单个RawContact“属于”单个Contact

幸运的是,ContactsContract API允许在查询Data表时使用implicit joins,因此您可以执行以下操作:

Uri dataUri = getIntent().getData(); //content://com.android.contacts/data/1169

String[] projection = new String[]{
        Data.CONTACT_ID,
        Data.RAW_CONTACT_ID,
        Data.DISPLAY_NAME,
        Data.MIMETYPE,
        Data.DATA1};

Cursor cur = getContentResolver().query(dataUri, projection, null, null, null);
cur.moveToFirst(); // there should always be exactly one result, since we have a specific data uri here

Log.i("Contact Info", "Got info: id=" + cur.getLong(0) + ", raw-id=" + cur.getLong(1) + ", " + cur.getString(2) + ", " + cur.getString(3) + ", " + cur.getString(4));

cur.close();

答案 1 :(得分:0)

我知道这是一个很晚的回复,但请查看以下代码。

class MessageActivity : AppCompatActivity() {

private val TAG: String = javaClass.simpleName

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_message)

    if(intent != null && intent.data != null) {
        Log.e(TAG, intent.data.toString())

        var contactName = ""
        val cursor = contentResolver.query(intent.data!!,
            arrayOf(ContactsContract.Data.DATA1,ContactsContract.Data.DATA2,ContactsContract.Data.DATA3),
            null,null,null)

        if(cursor != null && cursor.moveToFirst()) {
            do{
                Log.e(TAG, cursor.getString(cursor
                    .getColumnIndexOrThrow(ContactsContract.Data.DATA1)))
                contactName = cursor.getString(cursor
                    .getColumnIndexOrThrow(ContactsContract.Data.DATA2))
                Log.e(TAG, contactName)
                Log.e(TAG, cursor.getString(cursor
                    .getColumnIndexOrThrow(ContactsContract.Data.DATA3)))
            }while (cursor.moveToNext())
            cursor.close()
        }

        messaging_text.text = getString(R.string.messaging) + " $contactName"
    }
}}

因此,当您注册联系人时,您会设置一些 Data1、Data2 和 Data3 值。 Data3 是在联系人中显示的内容。您可以设置 Data1 和 Data2 一些您喜欢的值,然后像我上面提到的代码一样检索它。

您还可以查看我的博客 here。查找“同步服务”部分,最后您会找到 MessageActivity。

感谢和问候