2010-11-25 13 views
13

連絡先のIDでアンドロイドの連絡先カードを開くことはできますか?それは電話番号で動作します。ここに例を示します。IDで連絡先カードを開く方法

Intent i = new Intent(); 
i.setAction(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT); 
i.setData(Uri.fromParts("tel", "123456", null)); //<---- Change here from Phone to IDcontext.startActivity(i); 

しかし、連絡先の電話番号が変更された場合など、IDでこの連絡先カードを開きたいとします。

答えて

40

を使用して、ACTION_VIEWを使用し、連絡先IDを使用して連絡先URIを作成するか、連絡先参照URIを既に使用している場合は使用します(推奨)。

+1

あなたの答えをありがとう、それはまさに私が探していたものでした。 –

+4

ちょっとした注意:「id」で連絡先を選択するのはお勧めしません。変更されないことは保証されていないからです。実際、id *が変更される可能性は非常に高いです。ルックアップキーは常に同じなので、jhominalのソリューションを使用してLOOKUP_URIで取得する必要があります。背景:同期の間にIDが変更される可能性があるので、それに依存しないでください。または、連絡先リストの同期中または後でいつでもアプリケーションが中断する可能性があります。 – Tseng

+0

「ID」の意味が間違っています。あなたのTsengに感謝します。私は自分のコードで変更し、次回のために覚えています:) –

4

次のURIを使用します。

Uri.Builder newUriBuilder = ContactsContract.Contacts.CONTENT_LOOKUP_URI.buildUpon(); 
newUriBuilder.appendPath("/").appendPath(theContactKey) 
i.setData(newUriBuilder.build()); 

あなたはこのURIがAPI documentation for CONTENT_LOOKUP_URIを見て、どのように機能するかについての詳細を見つけるでしょう。

+5

[OK]を、中を向いためjhominalありがとうございましたあなたの答えは完全に正しくはありませんでした。 Uri look = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI、hereTheLookupKey);これは正しいソリューションです。インテントi =新しいインテント(Intent.ACTION_VIEW); i.setData(ルック); –

+0

はこのURIをよく使用していません:Contacts.getLookupUri(con​​tactId、lookupKey)? –

2

ここに挙げた方法を使用して連絡先カードを開こうとしましたが、開かれた直後に連絡先アクティビティが閉鎖されていました。

連絡先のアクティビティで古いコンテンツのURIが受け入れられなかったようです。

私は連絡先カードを開くためのコードとなり、右コンテンツURI https://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#getLookupUri(long, java.lang.String)

を得るためContactsContract.ContactsクラスのgetLookupUri (long contactId, String lookupKey)メソッドを使用してこの問題を解決:

Intent intent = new Intent(Intent.ACTION_VIEW); 
String lookupKey = phonesCursor.getString(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.LOOKUP_KEY)); 
long contactId = phonesCursor.getLong(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); 
Uri uri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); 
intent.setData(uri); 
startActivity(intent); 
関連する問題