私の目標は、電話番号が記載された連絡先のみをユーザーに表示し、ユーザーがローカルに保存する連絡先をいくつか選択できるようにすることです。
以下のメソッドでContactsContract.Contacts.CONTENT_URIの代わりにさまざまなオプションを使用しました。しかし、私は多くの連絡先(多くは電子メールIDのみのジャンクです)を表示しています。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_selector);
((Button)findViewById(R.id.btnphonecontactlist)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactIntent, 1);
}
});
}
上記のメソッドのパラメーターとしてContactsContract.Contacts.CONTENT_URIを渡し、以下のハンドラーメソッドの場合、クエリメソッドのString []をプロジェクションパラメーター(コメント付きで表示)として渡すと、メソッドはjava.lang.IllegalArgumentExceptionで失敗します。以下の方法でnullを渡すと、どの連絡先を選択しても、電話番号やメールアドレスに関連する列が見つかりません。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(data != null)
{
Uri uri = data.getData();
if(uri != null)
{
Cursor c = null;
try
{
c = getContentResolver().query(uri, null
// new String[] {
//ContactsContract.CommonDataKinds.Phone.NUMBER,
//ContactsContract.CommonDataKinds.Phone.TYPE},
, null, null, null);
if(c != null && c.moveToFirst())
{
String number = c.getString(0);
String type = c.getString(1);
}
}
finally
{
if(c != null && !c.isClosed())
c.close();
}
}
}
}
ユーザーが電話帳にアクセスしたときにユーザーに表示される連絡先のみを表示する方法はありますか?また、電話番号が利用可能ですか?
stackoverflowや他のサイトのすべてのスレッドを調べてみましたが、多くの人が問題を投稿しているにもかかわらず、この問題を解決する解決策を見つけることができませんでした。私はAndroidプラットフォームをあまり使用しておらず、特定の細かい部分を見逃している可能性があります。これを実現する簡単な方法があるはずです。
親切に提案します。あなたの助けに感謝。
ありがとう。