2011-05-02 18 views
1

ACTION_SENDインテントを処理します。ACTION_SENDの処理

Bundle extras = intent.getExtras(); 
if (extras.containsKey(Intent.EXTRA_STREAM)) 
{ 
    Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM); 
    .... 

このURIはこのようなものです:: は、だから私はこのコードを使用して、共有アイテムの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

ログカット出力を提供してください。 – Michael

+0

logcatについて考えていただきありがとうございます。私は以前にそれについて知りません:) 問題は簡単でした - READ_CONTACTS権限。カーソルが作成されましたが、_IDフィールドがありません – Ivan

+0

あなたが持っているURIは、連絡先ではなくVCARDとして表されています。 – Malachi

答えて

0

だけでコンテンツにas_vcardを削除します。//com.android.contacts/contacts/as_vcard/0n3B4537432F4531

それはこれを試して動作しない場合。あなたはEXTRA_STREAMcontent:// URIを受信した場合

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

あなたはメタ情報を取得するために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)を取得し、ストリームを読み取ること。後でそれを閉じることを忘れないでください。