連絡先情報の取得について

510 views
Skip to first unread message

gif

unread,
Feb 11, 2011, 3:23:50 AM2/11/11
to 日本Androidの会
こんにちは!

android 2.1での連絡先情報の取得方法でつまずいています。
実現させたい事は、
ふりがな検索をした結果のCONTACT_IDを取得して、
そのIDに紐づく「名前」、「電話番号」、「メールアドレス」を取得したいのですが、
なかなか効率のよい取得方法がわかりません。

現在の取得方法は、
①Data.CONTENT_URIからふりがな検索をしたカーソルを取得。
②Phone.CONTENT_URIで取得したカーソルと①で取得したカーソルをCONTACT_IDで結合する。
③合致した結果をリストに詰める。
④Email.CONTENT_URIで取得したカーソルと①で取得したカーソルをCONTACT_IDで結合する。
⑤合致した結果をリストに詰める。

問題点
・処理性能が悪い
・電話番号とメールアドレスを登録していた場合、最終的な結果としては
データが重複してしまう。(Phone.CONTENT_URI、Email.CONTENT_URIでそれぞれ検索しているため)
・Phone.CONTENT_URI、Email.CONTENT_URIのをCONTACT_IDで結合も考えたが、
当然電話番号とメールアドレス両方とも登録されているデータしか取得されない。

実はもっと簡単に取得できるのではないかと思っています。

わかる方いらっしゃいましたら教えて下さい。


sakamoto toshiyuki

unread,
Feb 11, 2011, 6:57:17 AM2/11/11
to android-g...@googlegroups.com
坂本といいます。こんにちは。

Intent intent = new Intent(Intent.ACTION_SEARCH);
intent.setComponent(new
ComponentName("com.android.contacts","com.android.contacts.ContactsListActivity"));
intent.putExtra(SearchManager.QUERY, "探したい文字列");
context.startActivityForResult(intent, 1);

でContactsアプリでの検索結果を取ってこれますが、それでは駄目ですか?


ではでは

2011年2月11日17:23 gif <gif...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

yokmama

unread,
Feb 12, 2011, 1:13:45 AM2/12/11
to android-g...@googlegroups.com
夜子ままです

2.1から連絡帳がむずかしくなっちゃましたよね、けっこうこれには頭をいためました。
同じContactIDにたいして複数の電話番号があったりメールアドレスがあったりするので仕方ないのかもしれません。
多分、下のやりかたでやっている人がほとんどだとおもいます、
ちょっと楽をしたいなら、CursorJoinerというクラスがあり、これをつかうと結果を結合させることができます。
だけど、かなり癖があるのにで利用には注意してください。


2011年2月11日17:23 gif <gif...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
*************************************************
Re:Kayo-System Co.,Ltd. 

CEO    Masafumi Terazono
Twitter @yokmama
*************************************************


gif

unread,
Feb 12, 2011, 8:23:28 AM2/12/11
to 日本Androidの会
ありがとうございます!

実装してみたのですが、文字列検索した結果が、
別画面で表示されるようになりました。

別画面は表示せず、検索結果のデータのみ取得する事は出来るのでしょうか?
onActivityResultをオーバーライドして取得するイメージでしょうか?

すいません。よろしかったらご返事お待ちしております。









On 2月11日, 午後8:57, sakamoto toshiyuki <sakamoto.n...@gmail.com> wrote:
> 坂本といいます。こんにちは。
>
> Intent intent = new Intent(Intent.ACTION_SEARCH);
> intent.setComponent(new
> ComponentName("com.android.contacts","com.android.contacts.ContactsListActi vity"));
> intent.putExtra(SearchManager.QUERY, "探したい文字列");
> context.startActivityForResult(intent, 1);
>
> でContactsアプリでの検索結果を取ってこれますが、それでは駄目ですか?
>
> ではでは
>
> 2011年2月11日17:23 gif <gif2...@gmail.com>:

gif

unread,
Feb 12, 2011, 8:59:38 AM2/12/11
to 日本Androidの会
ありがとうございます!!

はい。CursorJoinerを使用しているイメージで説明しておりました。
現在はCursorJoinerを使用せず、

①Data.CONTENT_URIからふりがな検索をした結果を取得しその件数分②、③を繰り返しています。
②Phone.CONTENT_URIから①で取得したcontact_idで電話番号を検索。
③Email.CONTENT_URIから①で取得したcontact_idでメールアドレスを検索。

処理性能がおちます。

欲しいデータとしては、
・mailアドレスだけの人の連絡先情報。
・電話番号だけの人の連絡先情報。
・電話番号&メールアドレスが登録されてる人の連絡先情報。
です。

当初は
Data.CONTENT_URIからData.MIMETYPE=StructuredName.CONTENT_ITEM_TYPEで検索し、
連絡先一覧を取得します。
取得した結果をPhone.CONTENT_URIとcontact_idで結合します。
上記処理で電話番号は取得できますが、今度はmailアドレスも同じ事をして
取得しなければなりません。

もっと簡単に電話番号、メールアドレスを取得できないものかと考えております。


On 2月12日, 午後3:13, yokmama <hijirinhiji...@gmail.com> wrote:
> 夜子ままです
>
> 2.1から連絡帳がむずかしくなっちゃましたよね、けっこうこれには頭をいためました。
> 同じContactIDにたいして複数の電話番号があったりメールアドレスがあったりするので仕方ないのかもしれません。
> 多分、下のやりかたでやっている人がほとんどだとおもいます、
> ちょっと楽をしたいなら、CursorJoinerというクラスがあり、これをつかうと結果を結合させることができます。
> だけど、かなり癖があるのにで利用には注意してください。
>
> 2011年2月11日17:23 gif <gif2...@gmail.com>:
>
>
>
>
>
>
>
>
>
> > こんにちは!
>
> > android 2.1での連絡先情報の取得方法でつまずいています。
> > 実現させたい事は、
> > ふりがな検索をした結果のCONTACT_IDを取得して、
> > そのIDに紐づく「名前」、「電話番号」、「メールアドレス」を取得したいのですが、
> > なかなか効率のよい取得方法がわかりません。
>
> > 現在の取得方法は、
> > ①Data.CONTENT_URIからふりがな検索をしたカーソルを取得。
> > ②Phone.CONTENT_URIで取得したカーソルと①で取得したカーソルをCONTACT_IDで結合する。
> > ③合致した結果をリストに詰める。
> > ④Email.CONTENT_URIで取得したカーソルと①で取得したカーソルをCONTACT_IDで結合する。
> > ⑤合致した結果をリストに詰める。
>
> > 問題点
> > ・処理性能が悪い
> > ・電話番号とメールアドレスを登録していた場合、最終的な結果としては
> > データが重複してしまう。(Phone.CONTENT_URI、Email.CONTENT_URIでそれぞれ検索しているため)
> > ・Phone.CONTENT_URI、Email.CONTENT_URIのをCONTACT_IDで結合も考えたが、
> > 当然電話番号とメールアドレス両方とも登録されているデータしか取得されない。
>
> > 実はもっと簡単に取得できるのではないかと思っています。
>
> > わかる方いらっしゃいましたら教えて下さい。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.comにメールを送信してくださ い。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
Reply all
Reply to author
Forward
0 new messages