質問
今から2日以上にわたり、私は彼らの家族と与えられた名と一緒に、内部アドレスブック(Facebook、GmailContacts、TwitterContactsなし)から、すべての連絡先のリストを取得しようとしています。
ソーシャルコンタクトを含むすべての連絡先を含むリストを取得することができました。そこで私はaccount_typesを見て、私のHTCで、すべての内部アドレスブックコンタクトが「com.htc.android.pcsc」からのものであることを望んでいるのを見ました。しかし、このフィルターをハードコードする場合、非HTC Android携帯電話を持っているすべての人は私のアプリを使用できません。
次のアイデアは、ユーザーに使用したいアカウントを選択させることでしたが、残念ながら「com.htc.android.pcsc」は、アカウントマネージャーから得たリストには表示されませんでしたか?!?
私の質問は、内部Adressbookにアクセスする標準化された方法はありますか?私は本当にそれに固執していて、ヒントはとても感謝しています!
/編集: たぶん私は自分自身を十分に明確にしなかったでしょう。私 できる ContactScontract APIを介して、連絡先をつかむ:
ArrayList phoneContacts = new ArrayList();
String[] projection = new String[] {
Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME
};
String selection = Data.MIMETYPE+" = '"+ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE+"'";
Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, selection, null, null);
while (cursor.moveToNext()) {
phoneContacts.add(...);
}
cursor.close();
しかし、その後、com.google / com.htc.socialnetwoork.facebookなど、すべての異なるaccounttypesから連絡先があります。
そして、私の質問は、これらすべてのSocialNetworkとGmailContactをすべてフィルタリングするにはどうすればよいですか?
/edit2: 私が持っているのと同じ困難を説明する例を見つけました:http://forum.synthesis.ch/showthread.php?t=2057Synthesis AGは、SyncMLと同じ問題を抱えていました。人々は、Gmail、Facebookなどとのみ内部アドレスブック/電話帳と同期できないと不満を述べていましたが、これらの他のすべての説明型から内部アドレスブックを分離することができました。したがって、この問題を解決する方法があるに違いありませんが、その方法はわかりません。助けてください!
解決
質問は別のスレッドで答えられました: Android連絡先アプリケーションの連絡先のデフォルトのアカウントタイプ /名前は何ですか?
他のヒント
実際にアカウントの種類を気にする必要がありますか?
各個人ではなく、集約されたトップレベルの連絡先を取得するだけです 生 連絡先 - そしてそれを連絡先リストとして使用します。
たとえば、根本が複数ありますが、1つの連絡先エントリにリンクされている多くの連絡先があります 生 連絡先エントリ(GoogleアカウントやFacebookなどから)。
私の電話帳から個々のGoogleとFacebookの連絡先をすべて除外した場合、何も残されていません。または、すべての生の連絡先をリストした場合、実際の人だけでなく、多くの複製がある90の連絡先があります。
したがって、集約された連絡先を取得するだけで、アカウントの種類は関係ありません。
携帯電話のアドレス帳に連絡先を追加するときは、設定する必要があります ACCOUNT_NAME
と ACCOUNT_TYPE
に null
. 。ただし、デバイスはこれらの値を適切な名前とタイプに変更し、これらの値はさまざまなメーカーで同じではありません。
アドレス帳アカウントを除くすべてのアカウントを除外する本当に良い方法はわかりません。私はそのような行動を実装する方法だけを見ていますが、どちらもそれほど良くないようです:
- アカウントのリストを取得し、このリストからアカウントとの連絡先をフィルタリングできます。 SIMからの連絡先
"com.anddroid.contacts.sim"
アカウントの種類も除外する必要があります。 - 偽の連絡先を内部アドレス帳に保存してから、それを見つけて、そのアカウントタイプを決定できます。たとえば、アプリの最初の発売では、一度だけ実行できます。