質問

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

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

役に立ちましたか?

解決

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

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

概要 連絡先契約 (「3 層データ モデル」に言及した時点でカットしたことに注意してください)...

概要

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

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

編集: ブラウザでリンクをクリックしたときに vCard をインポートする WRT - はい、良い点です。少なくとも Bluetooth で vCard を受信するときに動作することを確認できました (もちろん、これは非常に論理的です)。携帯電話で vCard を「開く」と、「ファイル エディター」または「ピープル」 (HTC の連絡先アプリ - 他の携帯電話でも同じように呼ばれるかどうかはわかりません) のどちらを使用するかを尋ねる「選択者」が表示されます。vCard が 1 つだけの場合は、それ以上のプロンプトは表示されずにインポートされます。複数ある場合は、One/Multiple/All をインポートするかどうかを尋ねる別のセレクターが表示されます (Multiple では、選択を行うためのチェックボックスを備えた別のセレクターが表示されます)。

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

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

編集2: インテントを使用して .vcf ファイルを処理する方法についてですが、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);

他のヒント

私は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です

私はそれが役立つことを願っています!!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top