处理ACTION_SEND

时间:2011-05-02 03:16:43

标签: android contactscontract

我想处理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);

并在两种情况下都有例外和程序终止。

请帮忙!

2 个答案:

答案 0 :(得分:0)

只需删除内容中的as_vcard://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);

答案 1 :(得分:0)

如果您在content://中收到EXTRA_STREAM URI,则应该可以查询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)并阅读该流。不要忘记之后关闭它。