簡體   English   中英

將電話號碼或 CONTACT_ID 從 android 聯系方式傳遞給活動(whatsapp 之類)

[英]Passing phone number or CONTACT_ID from android contact details to activity (whatsapp like)

我想要實現的是在 android book 聯系方式中為我的應用程序添加快捷方式,類似於 whatsapp 正在做的事情。

我一直在關注這個教程: http : //blogs.quovantis.com/syncing-contacts-with-an-android-application-2/它運行良好,但作者沒有展示如何從聯系人詳細信息傳遞數據到查看活動: 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。 有什么幫助嗎?

好的,您從“ Contacts應用程序獲得的Uri似乎是一個Data uri。

Data行包含有關特定RawContact的特定數據項(如電話號碼或電子郵件)的RawContact ,因此單個Data行“屬於”單個RawContact ,后者“屬於”單個Contact

幸運的是, ContactsContract API 允許在查詢Data表時進行隱式連接,因此您可以執行以下操作:

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

我知道這是一個很晚的響應,但請查看以下代碼。

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 一些您喜歡的值,然后像我上面提到的代碼一樣檢索它。

你也可以在這里查看我的博客。 查找“同步服務”部分,最后您會找到 MessageActivity。

感謝和問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM