6

私はプログラムで電話から利用可能な連絡先を選択しようとしています、そして私は以下のコードを使用しています

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        startActivityForResult(intent, 1);

ただし、問題は、連絡先ページのチェックボックスを使用して一度に複数の連絡先を選択するにはどうすればよいですか?

4

2 に答える 2

12

連絡先をプログラムで読み、のに表示する必要がありListViewますActivityCheckBoxアイテムでsを使用しListView、複数のアイテムを選択できるようにします。の簡単な例/チュートリアルを見つけて、ListViewそこから始めます。

ListView使用するよりもカスタムを作成する方がよい理由はいくつかありますIntent(Intent.ACTION_GET_CONTENT);

  1. あなたが要求したように倍数を選択する方法がないかもしれません。
  2. 複数を選択する方法を見つけたとしても、OSのバージョンやデバイスごとに異なり、すべてで機能するとは限りません。
  3. を処理できるデバイスに複数のアプリケーションがインストールされている場合はACTION_GET_CONTENT、ユーザーにチューザーが表示され、ユーザーはそのうちの1つを選択する必要があります。ユーザーの選択は、複数の連絡先の選択をサポートしていない場合があります。

システムの連絡先を読み取る例を次に示します。

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
while (cursor.moveToNext()) {
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
    String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    if("1".equals(hasPhone) || Boolean.parseBoolean(hasPhone)) { 
        // You know it has a number so now query it like this
        Cursor phones = myActivity.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
        while (phones.moveToNext()) { 
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            int itype = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

            final boolean isMobile =
                itype == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE ||
                itype == ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE;

            // Do something here with 'phoneNumber' such as saving into 
            // the List or Array that will be used in your 'ListView'.

        } 
        phones.close();
    }
}
于 2013-03-25T18:04:49.547 に答える
3
   public static final int REQUEST_CODE_PICK_CONTACT = 1;
   public static final int  MAX_PICK_CONTACT= 10;

   private void launchMultiplePhonePicker() {

        Intent phonebookIntent = new Intent("intent.action.INTERACTION_TOPMENU");
        phonebookIntent.putExtra("additional", "phone-multi");
        phonebookIntent.putExtra("maxRecipientCount", MAX_PICK_CONTACT);
        phonebookIntent.putExtra("FromMMS", true);
        startActivityForResult(phonebookIntent, REQUEST_CODE_PICK_CONTACT);

     }



@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(resultCode==RESULT_OK)
    {

    if(requestCode == REQUEST_CODE_PICK_CONTACT  )
    {

        Bundle bundle =  data.getExtras();

        String result= bundle.getString("result");
        ArrayList<String> contacts = bundle.getStringArrayList("result");


        Log.i(TAG, "launchMultiplePhonePicker bundle.toString()= " + contactsPick.toString() );

        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}
于 2015-01-18T17:37:10.627 に答える