Android 处理行动

Android 处理行动,android,contactscontract,Android,Contactscontract,我想处理行动和发送意图。 因此,我使用以下代码获取共享项的uri: Bundle extras = intent.getExtras(); if (extras.containsKey(Intent.EXTRA_STREAM)) { Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM); .... 此uri如下所示: content://com.android.contacts/contacts/as_vcard/0

我想处理行动和发送意图。 因此,我使用以下代码获取共享项的uri:

Bundle extras = intent.getExtras();
if (extras.containsKey(Intent.EXTRA_STREAM))
{
    Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
    ....
此uri如下所示:

content://com.android.contacts/contacts/as_vcard/0n3B4537432F4531
我如何从这个uri获得确切的联系

我试过这个:

Cursor cursor = managedQuery(uri, null, null, null, null);
这是:

Cursor cursor = getContentResolver().query(uri, null, null, null, null);
在这两种情况下都出现了异常和程序终止


请帮忙

只需在中移除as_vcard即可content://com.android.contacts/contacts/as_vcard/0n3B4537432F4531

如果不起作用,试试这个

String key= uri.getPathSegments().get(2);
Cursor cursor = getContentResolver().query(Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, key),
null, null, null, null);

如果您在
额外流
中收到
内容://
URI,您应该能够查询以获取元信息

String name = null;
String size = null;

Cursor cursor = getContentResolver().query(uri, new String[] { OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE }, null, null, null);
if (cursor != null) {
    try {
        if (cursor.moveToFirst()) {
            name = cursor.getString(0);
            size = cursor.getString(1);
        }
    } finally {
        cursor.close();
    }
}

要获取实际内容,请使用并读取流。不要忘了在事后关闭它。

请提供logcat输出。感谢您对logcat的想法-我以前不知道:)问题很小-请阅读。现在光标已创建,但它没有_ID字段您拥有的URI用于表示为VCARD而不是contact的联系人。