問題タブ [rawcontacts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 連絡先にカスタム情報を追加する必要がある場合、どの生の連絡先を更新するかをどのように選択しますか?
ご存知のように、集約された連絡先 (1 つの 1) があり、それぞれがその連絡先にリンクされた複数の生の連絡先 (多くの N) を持つことができます。
したがって、それらの間には 1 つの連絡先 -> N 個の生の連絡先の関係があります。
連絡先のカスタム情報を保存する必要がある場合は、生の連絡先の 1 つについて保存する必要があります。問題は、使用する raw 連絡先をどのように選択するかです。生の連絡先は、異なるアカウントに属することができます。
android - 連絡先と未加工の連絡先の違いは何ですか?
私は ContactsContract を調査するために使用している "ダンプ" ユーティリティを持っています。連絡先をダンプすると、テーブルに 263 件のレコードがカウントされますが、デバイス リストの連絡先アプリケーションには 244 件あります (「244 件の連絡先を表示しています」)。
誰かが不一致を説明できますか?
私の Sprint LG の連絡先アプリには、同期しているアカウントごとに表示オプションがあり、すべてのアカウントにアクセスしてチェックしたので、フィルタリングは必要ありません。
ユーティリティで使用している主な URI は次のとおりです。
続いて (上記のクエリの各 _ID に対して):
次に、最初のクエリをループし、プロジェクションのすべての列を表示します。次に、最初のクエリのループで _ID フィールドを使用して、2 番目のクエリを発行し、その列をすべてダンプします。
便宜上、回答の箇条書きをここに転置します 。詳細な説明については、リファレンスを参照してください。具体的には、集計ルールについて読むことをお勧めします。 参照:以下の元の引用テキストについては、ここをクリックしてください
- 連絡先データベースは、連絡先、生の連絡先、およびデータの 3 つのテーブルに分かれています。
各テーブルには、自動インクリメントされた主キーである列 (_ID) が含まれています。- データ テーブルには、電話番号、メール ID、
住所などのすべての連絡先情報が含まれています。- 生の連絡先は、作成された実際の連絡先を指します。したがって、連絡先を追加する際に未加工の連絡先を使用します。
- ユーザーは連絡先テーブルにデータを追加できません。このテーブルのデータは 、連絡先が集約
されているため、内部的に入力されます。一部の連絡先でロジックが機能した理由は次のとおりです。連絡先の_ID、未加工の連絡先は、連絡先の集約が行われるまで同じままです。同じ名前 abc の 2 つの連絡先を追加するとします。ここでは、未加工の連絡先の _ID は 2 回増加しますが、連絡先の _ID は 1 回だけ増加します。これは、連絡先の集約によりこれら 2 つの連絡先がマージされるためです。
android - Android:RawContactIdを使用した適切なアクセスとクエリ
そのため、私のアプリは同期アダプターをAndroidネイティブの連絡先マネージャーに統合しようとしています。連絡先が同期されると更新できないことを除いて、これはすべてスムーズに実行されています。この特定の問題の詳細はここにあります:Android:コンテンツリゾルバークエリが0行を返す必要がないのに、間違ったURIをクエリしているため、コンテンツリゾルバークエリが0の値を返すと言うだけで要約できます。信じる。
生の連絡先IDを電話に書き込むときは、次のコードを使用して書き込みます。
このコンストラクターメソッドは、同期リストに新しい連絡先を追加するときに呼び出されます。
コンストラクターでわかるように、私はnewInsertCpoというメソッドを呼び出しています。これは、次の場所で確認できます。
コードが表示されたので、問題について説明します。生の連絡先IDを作成して書き込むときは、RawContacts.CONTENT_URIに書き込みます。
ただし、uriをクエリすると、次のようにクエリされます。
Data.CONTENT_URIから。これが私の問題が発生している場所だと思います。Androidの公式開発サイトのサンプルコードを使用して、自分の用途に合わせて調整しましたが、この部分は例にかなり当てはまります。しかし、それは機能していません。私のリードは私が言ったことです。私はあるウリに手紙を書き、別のウリに質問しています。しかし、クエリをRawContacts.CONTENT_URI(例外の原因)に変更しようとしました。また、Data.CONTENT_URIに書き込むURIも変更しました。これも例外の原因です。さらに紛らわしいのは、lookupRawContactIdメソッドを実行するときにData.CONTENT_URIから生の連絡先IDを取得することです。
そうです、rawcontactIdを返すカーソルを取得した場合、同じrawcontactIdを使用して同じUriをクエリする0の値を取得するのはなぜですか?意味がありません!誰かが何か洞察を持っていますか?皆さんありがとう。
android - データをAndroidの連絡先に関連付ける
いくつかのデータを電話のすべての連絡先に関連付ける方法を探しているので、ContactsContract.RawContacts.Dataクラスを処理しようとしましたが、何かを機能させることができませんでした。
さらに、DBの主キーとしてLookupKeyを使用できると思いました> _ <すべての連絡先で550に設定されているため、このキーの目的について間違っていたようです。 LookupKeyの目的についての手がかり/詳細な説明を教えてください。
基本的に、私のアプリはサーバー上の連絡先の名前を探します。名前がサーバーで見つかった場合は、連絡先とデータをその特定のDBに保存する必要があります。
私がContactsContract.RawContacts.Dataクラスに私が望むことを実行させることができれば、DBのことを回避できますよね?
前もって感謝します。
android - 連絡先のバックアップと同期のアプリケーション
連絡先のバックアップと同期に取り組んでいます。
目標は、すべての連絡先のすべての詳細をサーバー (定義されたカスタム プロトコル) にバックアップとして送信することです。
アプリケーションの最初の起動時に、すべての連絡先がキューに入れられ、サーバーに送信されます。その後、新しい連絡先の追加/連絡先の更新をリッスンするバックグラウンド サービスが常に実行され、この新しい/更新された連絡先がバックグラウンド サービスによってサーバーに送信されます。
レコードを取得するためにRawContactsEntityを使用しています。
ContentObserver
連絡先の追加または変更の通知を取得するために、RawContacts/Data テーブルで使用してみました。しかし、私の知る限り、個々のレコードのIDではなく、テーブル全体の変更されたデータのContentObserver
通知( )を提供します。onChange()
今私の問題は、変更された/新しいレコードの正確なIDを取得する方法ですか?
ネイティブの連絡先テーブルと比較して変更されたレコードを取得するためのバックアップ テーブルを作成することを考えました。しかし、接点の数が増えると、パフォーマンスが大幅に低下し、バッテリーの寿命も妨げられます。
パフォーマンスとメモリ使用量の観点から、この連絡先のバックアップ操作を達成するための最良の方法を提案できますか? 連絡先を同期する他の方法はありますか?
これで私を助けることができる例を誰かが共有できれば、非常に役に立ちます。
rawcontacts - 連絡先の追加 Android 2.3 rawContactId
私はJavaとアプリの開発が初めてで、連絡先を追加する方法がわかりません。私はアンドロイド開発ウェブサイトから直接取っています:
私の質問は: rawContactId の代わりに何を入れますか? 連絡先の名前になるはずですか?以下の連絡先を追加する新しい方法に進みたいのですが、「従来の」方法でさえ機能しません。ヘルプ?
android - Android: インポートされた連絡先が表示されない
Adnroid dev SimpleSyncAdapter の例を使用して、クラウドベースの連絡先をアプリケーションにインポートしています。インポートは正常に実行されます。エミュレーターにアクセスcontracts2.db
すると、すべての連絡先が存在し、raw_contacts
テーブルに適切に入力されているようです。ここにパズルがあります:data
contacts
- 新しくインポートされた連絡先は、エミュレーターには表示されません。実際、「連絡先」をクリックすると、次のメッセージが表示されます
You don't have any contacts to display
- N1 電話で同じインポートを実行すると、既存の一致する連絡先に関するインポートされた情報しか表示されません。連絡先が本当に新しい場合は、連絡先リストに表示されません。
- 連絡先を手動で追加してからインポートを実行すると、インポートからの情報が同じ名前で手動の連絡先にマージされます (マージ OK)。
- インポートを実行して連絡先を手動で追加すると、この連絡先にはクラウドベースの情報が含まれません (マージなし)
_id
それは、連絡先と生の連絡先の間の何らかの同期が、私が見る連絡先テーブルで壊れているか壊れていると思いname_raw_contact_id
ますlookup
。
注:ここで非常によく似た質問を見つけましたが、残念ながら答えがありません
android - AndroidでRawContact写真のURIを取得する
次を使用して連絡先の写真のURIを取得できることを知っています。
RawContactに対して同じことを行う方法はありますか?
私はもう試した:
しかし、それは機能しません...
実際のBLOBの代わりにURIが必要な理由は、コードがAppWidgetにあり、ウィジェットからランチャーにデータを渡すときに2、3メガの非常に厳しい制限があるように見えるため、setImageViewUriを使用する必要があります。 setImageViewBitmap。
ありがとう。
android - RawContact を追加して、既存の連絡先に集約する
カスタム データ フィールドが元の連絡先内に表示されるように、新しい RawContact を既存の連絡先に追加しようとしています。元の RawContact の DisplayName と一致する DisplayName を使用して、StructuredName データ行を新しい RawContact に追加しようとしました。両方の RawContacts を集約するには DisplayNames を一致させるだけで十分だと思いましたが、連絡先アプリは両方の RawContacts を異なる連絡先として表示するようです。
これが私のコードです
android - Androidの連絡先をクエリして、ACCOUNT_TYPEとACCOUNT_NAMEを取得します
連絡先のリストと、名前などの基本情報を取得できます。電話、電子メール、IM、メモ、バックアップ目的の組織ContactsContract.Contacts.CONTENT_URI
。さまざまな情報タイプの連絡先およびその他の特定のURIのリストに使用します。
すべての情報を完全に復元するには、さらに2つのフィールドが必要です。
ContactsContract.RawContacts.ACCOUNT_TYPE
ContactsContract.RawContacts.ACCOUNT_NAME
誰かがContactsContract.Contacts.CONTENT_URIから連絡先IDを知っているので、この情報を取得する方法を教えてもらえますか?
ありがとうございました