2

私はしばらくの間ContactsContractAPIを使用していて、ContactsContractのAPIページにリストされている2つの「列」に出くわしました。実際には評価できないように見える連絡先。

値は(列見出しの下に)「NAME_RAW_CONTACT_ID」および「DISPLAY_NAME_PRIMARY」です。

APIを読むと、これら2つの値は、特定の連絡先の表示名を作成するために使用される構造化名(DATA内)に接続しているように見えます。連絡先テーブルから直接これにアクセスできることは、現時点では非常に便利ですが、私が知る限り、実際には動作中のAPIには含まれていません(2.1と2.2の両方に対してテストしました)。

関連する定数はContactsオブジェクトに存在せず、フィールドに直接アクセスしようとすると(オンラインのコードダンプで見た小文字の文字列バージョンを使用して)、SQLエラー(無効な列)が表示されます。 。

誰かがこれらにアクセスすることに幸運がありましたか?これらは実際にAPIに含まれていますか?

編集:さらにチェックを行いました。APIにリストされているが実際には含まれていないように見えるRawContactsの関連する値がいくつかあります:DISPLAY_NAME_ALTERNATIVE、DISPLAY_NAME_PRIMARY、DISPLAY_NAME_SOURCE、PHONETIC_NAME、PHONETIC_NAME_STYLE、SORT_KEY_ALTERNATIVE、SORT_KEY_PRIMARY。

これらはすべて、javadocがリリースされたときに誤って除外されなかった、APIにまだ含まれていない機能のようです。他の人もこれらの機能にアクセスできない場合は、バグレポートを提出する価値があるかもしれません。

4

3 に答える 3

0

これらのフィールドの一部も使用したかった (ver 2.2) が、ContactsContract.DataColumnsWithJoins.DISPLAY_NAME_ALTERNATIVE 静的文字列が表示されない。そのため、クエリ「display_name_alt」にその値を直接使用し、そのフィールドのデータを取得しました。

すべてのフィールドを要求するクエリも使用し (managedQuery() 関数の「String[] プロジェクション」変数に null を入力)、すべてのフィールドを取得しました。エラーと自動作成されたSQLを取得するために、sortOrder変数に間違いを挿入しました。だからSQLはこんな感じだった

near "mimetype": syntax error: , while compiling:
SELECT 
data_version, 
phonetic_name, 
phonetic_name_style, 
contact_id, 
lookup, 
data12, 
data11, 
data10, 
mimetype, 
data15, 
data14, 
data13, 
display_name_source, 
data_sync1, 
data_sync3, 
data_sync2, 
data_sync4, 
account_type, 
custom_ringtone, 
status_update_id, 
status_updates.status AS status, 
data1, 
data4, 
data5, 
data2, 
data3, 
data8, 
account_type  AS ext_account_Type, 
data9, 
group_sourceid, 
data6, 
account_name, 
data7, 
display_name, 
in_visible_group, 
display_name_alt, 
contacts_status_updates.status_res_package AS contact_status_res_package, 
is_primary, 
contacts_status_updates.status_ts AS contact_status_ts, 
raw_contact_id, 
times_contacted, 
contacts_status_updates.status AS contact_status, 
status_updates.status_res_package AS status_res_package, 
status_updates.status_icon AS status_icon, 
contacts_status_updates.status_icon AS contact_status_icon, 
presence.mode AS mode, 
version, 
last_time_contacted, 
res_package, _id, 
name_verified, 
status_updates.status_ts AS status_ts, 
dirty, 
is_super_primary, 
photo_id, 
send_to_voicemail, 
name_raw_contact_id, 
contacts_status_updates.status_label AS contact_status_label, 
status_updates.status_label AS status_label, 
sort_key_alt, 
starred, 
sort_key, 
agg_presence.mode AS contact_presence, 
sourceid 
FROM
 view_data_restricted data
 LEFT OUTER JOIN agg_presence ON (agg_presence.presence_contact_id=contact_id)
 LEFT OUTER JOIN status_updates contacts_status_updates ON (status_update_id=contacts_status_updates.status_update_data_id)
 LEFT OUTER JOIN presence ON (presence_data_id=data._id)
 LEFT OUTER JOIN status_updates ON (status_updates.status_update_data_id=data._id) 
WHERE (1) 
ORDER BY contact_id mimetype

したがって、使用可能なすべてのフィールドを表示できます。

方法がわからないのは、rawQuery() のように、Uri から SQL 文字列を含む Cursor を取得することです ...

于 2011-06-07T16:56:20.553 に答える
0

あなたが言及したこれらの項目について興味深いこと。「APIレベル以降」と書かれているところには、レベルは言及されていません。バグレポートは順調だと思います。

于 2010-11-24T00:13:25.003 に答える