1

我想处理 ACTION_SEND 意图。因此,我使用以下代码获得了共享项目的 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);

并在这两种情况下都出现异常和程序终止。

请帮忙!

4

2 回答 2

0

如果您收到一个content://URI,EXTRA_STREAM您应该能够查询OpenableColumns以获取元信息。

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

获取实际内容使用ContentResolver.openInputStream(Uri)并读取流。之后不要忘记关闭它。

于 2015-04-14T01:53:02.033 回答
0

只需删除 content://com.android.contacts/contacts/as_vcard/0n3B4537432F4531 中的 as_vcard

如果它不起作用,试试这个。

String key= uri.getPathSegments().get(2);
Cursor cursor = getContentResolver().query(Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, key),
null, null, null, null);
于 2012-10-15T04:02:03.897 回答