8

vcard を Android の連絡先としてインポートするクリーンな方法があるかどうか疑問に思っています。私は vcard パーサーを持っていますが、考えられる各 vcard フィールドとフィールド タイプをマッピングすることは、苦痛でバグが発生しやすい作業になるでしょう。より良い方法はありますか?

Android の連絡先は疑わしく vcard のように見えるため、vcard を内部で使用していると思われます。ただし、このためのパブリック API はありません。

4

2 に答える 2

10

Android の連絡先は疑わしく vcard のように見えるため、vcard を内部で使用していると思われます。

特に vCard は事実上単なるテキスト ファイル形式であり、保存するのが非効率的であり、大量のファイルを検索するのはさらに難しいため、「内部で vCards」を使用するよりもはるかに複雑だと思います。

ContactsContractの概要(「3 層データ モデル」に言及している箇所でカットしたことに注意してください)...

概要

ContactsContract は、連絡先関連情報の拡張可能なデータベースを定義します。連絡先情報は、次の 3 層のデータ モデルに格納されます。

私が知る限り、個々の連絡先に関連する vCard を「抽出」する方法はありますが、vCard から連絡先を作成する方法はわかりません。

EDIT:ブラウザでリンクをクリックしたときにvCardをインポートするWRT - はい、良い点です。少なくとも Bluetooth で vCard を受信した場合に動作することを確認できます (もちろん、これは非常に論理的です)。携帯電話で vCard を「開く」と、「ファイル エディタ」または「人」(HTC 連絡先アプリ - 他の携帯電話でも同じように呼び出されるかどうかは不明) を使用するかどうかを尋ねる「チューザー」が表示されます。vCard が 1 つしかない場合は、プロンプトを表示せずにインポートします。複数ある場合は、1 つ / 複数 / すべてをインポートするかどうかを尋ねる別のセレクターが表示されます ([複数] を選択すると、選択を行うためのチェックボックスが別のセレクターに表示されます)。

理論的には、.vcfファイルの全負荷をどこかのディレクトリにダンプし、それらの1つを「開き」、どのアクティビティを指定せずにstartActivity()で使用するインテントを作成するコードを書くことが可能かもしれません。使用する。ここでどのインテント アクションが使用されるかはわかりませんが、ACTION_VIEW から始めます。他の選択肢としては、ACTION_EDIT または (控えめに) ACTION_RUN を選択できます。

これは、特に 1 回限りの既知の環境で機能する可能性がありますが、少し面倒であり、動作/結果は、電話、Android のバージョン、および連絡先アプリによって異なる場合があります。

EDIT2: .vcf ファイルを処理するためにインテントを使用する WRT、私は SD カードからのみ試しました - 最初に保存せずにそれを行う方法がわかりません。以下は、Bluetooth経由で送信されたvCardを開いたときに表示されるものを正確に再現しています...

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file:///mnt/sdcard/downloads/bluetooth/MickeyMouse.vcf"), "text/x-vcard");
startActivity(i);
于 2011-01-05T01:27:18.197 に答える
0

Android で連絡先を vCard としてインポートするのに苦労しました。多くの時間を費やした後、連絡先をインポートするためのパブリック API がないことに気付きました。

私の知る限り唯一の方法は、Android のソース コードを再利用することです。Android 2.1 のソース コードを再利用して、同じことを実現しました。

ファイルは以下から参照できます。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/pim/vcard/exception/VCardException.java/

右側のエクスプローラーでは、必要なすべてのファイルが pim フォルダーの下にあります。手順の開始を担当するファイルは、ImportVCardActivity.java です。

役に立てば幸いです!!

于 2011-01-06T03:41:07.447 に答える