2011-05-02 54 views
1

我想處理ACTION_SEND意圖。 所以我得到使用此代碼共享項目的URI:處理ACTION_SEND

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

,並得到了在這兩種情況下的異常和程序終止。

請幫忙!

+1

請提供logcat輸出。 – Michael 2011-05-02 04:45:37

+0

謝謝關於logcat的想法 - 我只是不知道它之前:) 問題是微不足道的 - READ_CONTACTS權限。現在光標已創建,但它沒有_ID字段 – Ivan 2011-05-02 13:45:42

+0

您擁有的URI是用於表示爲VCARD而不是聯繫人的聯繫人。 – Malachi 2012-03-23 12:08:03

回答

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

如果在EXTRA_STREAM收到content:// 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)並閱讀該流。不要忘記關閉它後。