Android 連絡先アプリを開いてすべての連絡先を表示し、そのうちの 1 つを選択するのは簡単です。
活動中:
private int PICK_CONTACT = 853456;
// ...
// open contact list
void openContactPicker() {
Intent it= new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
startActivityForResult(it, PICK_CONTACT);
}
// when back from intent: use pick result
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// ...
switch (requestCode) {
case PICK_CONTACT:
if (dataOk(data)) {
extractContactInfo(data);
} else {
showErrorMessage();
}
break;
// ...
}
しかし、特定の要素 (完全な郵便情報、適切な電子メール、電話番号など) を持つ連絡先のみを連絡先アプリに表示するように、フィルター基準を設定することは可能ですか?
私のアプリには郵便情報が必要です。現在実装されているワークフローは次のようになります。
- ユーザーがボタンをクリックして連絡先を開く
- 連絡先アプリが起動し、すべての連絡先が表示されます
- ユーザーはいずれかを選択します
- 私のアクティビティに戻って、連絡先がチェックされます
- 利用可能な郵便情報 -> 正しいことを行う
- 郵便情報が利用できない -> メッセージ ボックス
多くの連絡先には郵便番号がないため、ほとんどの場合、「この連絡先の郵便番号がありません」というメッセージ ボックスが表示されます。これは容認できる動作ではありません。
1 つの代替方法は、アプリ内の連絡先データベースにクエリを実行し、独自のコードでフィルタリングを行うことですが、このアプローチを使用すると、いくつかの影響があります。
- アプリには連絡先の読み取り権限が必要ですが、これは多くのユーザーにとっては難しいかもしれません
- 連絡先ピッカーを実装する必要があります。これは、ユーザーが慣れ親しんでいるものとは異なる可能性があります
したがって、連絡先アプリにいくつかの基準を設定することは、これを行うためのはるかにエレガントな方法のようです.
アプリは Android 2.3.3 以降で実行する必要があります。
質問:
- 2.3.3 で、startActivityForResult 経由で起動するときに、連絡先アプリのフィルター基準 (特に「has_postal_information」など) を設定することは可能ですか?
- そうでない場合: それ以降の OS バージョンでは可能ですか?