使用联系人select器时,从多个号码的用户中select一个号码

我正在尝试允许用户使用联系人select器从联系人中select一个电话号码。 不过,现在我在网上看到的所有例子都显示了如何select一个联系人,但是我希望有一个第二个屏幕,然后popup,如果该联系人有多个电话号码,所以你可以指定你想select哪一个(方式该短信可让您在select联系人时进行此操作)。

我的问题是,你必须收集所有的数字,然后要求用户select一个数字,或者这是Android已经内置的function? 我希望我只是忘了一个国旗或什么的。

Solutions Collecting From Web of "使用联系人select器时,从多个号码的用户中select一个号码"

或者,您最初可以在联系人选取器中显示与每个联系人关联的电话号码,然后从中select一个。 以这种方式启动联系人select器(请注意与我的其他答案不同的URI):

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult(intent, REQUEST_PICK_CONTACT); 

然后,在onActivityResult()中:

 Uri result = data.getData(); Log.v(TAG, "Got a result: " + result.toString()); // get the phone number id from the Uri String id = result.getLastPathSegment(); // query the phone numbers for the selected phone number id Cursor c = getContentResolver().query( Phone.CONTENT_URI, null, Phone._ID + "=?", new String[]{id}, null); int phoneIdx = c.getColumnIndex(Phone.NUMBER); if(c.getCount() == 1) { // contact has a single phone number // get the only phone number if(c.moveToFirst()) { phone = c.getString(phoneIdx); Log.v(TAG, "Got phone number: " + phone); loadContactInfo(phone); // do something with the phone number } else { Log.w(TAG, "No results"); } } 

我能够通过创build第二个对话框来显示与联系人相关联的所有电话号码。 首先,在你的代码中调用这个地方:

 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, REQUEST_PICK_CONTACT); 

然后在onActivityResult()中使用这个来决定选定的联系人是否有多个电话号码,如果是的话显示一个对话框:

 Uri result = data.getData(); Log.v(TAG, "Got a result: " + result.toString()); // get the contact id from the Uri String id = result.getLastPathSegment(); // query for phone numbers for the selected contact id c = getContentResolver().query( Phone.CONTENT_URI, null, Phone.CONTACT_ID + "=?", new String[]{id}, null); int phoneIdx = c.getColumnIndex(Phone.NUMBER); int phoneType = c.getColumnIndex(Phone.TYPE); if(c.getCount() > 1) { // contact has multiple phone numbers final CharSequence[] numbers = new CharSequence[c.getCount()]; int i=0; if(c.moveToFirst()) { while(!c.isAfterLast()) { // for each phone number, add it to the numbers array String type = (String) Phone.getTypeLabel(this.getResources(), c.getInt(phoneType), ""); // insert a type string in front of the number String number = type + ": " + c.getString(phoneIdx); numbers[i++] = number; c.moveToNext(); } // build and show a simple dialog that allows the user to select a number AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.select_contact_phone_number_and_type); builder.setItems(numbers, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { String number = (String) numbers[item]; int index = number.indexOf(":"); number = number.substring(index + 2); loadContactInfo(number); // do something with the selected number } }); AlertDialog alert = builder.create(); alert.setOwnerActivity(this); alert.show(); } else Log.w(TAG, "No results"); } else if(c.getCount() == 1) { // contact has a single phone number, so there's no need to display a second dialog } 

我知道这是一个老问题,但我希望它有帮助。

以防万一有人再次绊倒

其他答案的另一种select是图书馆https://github.com/codinguser/android_contact_picker

充分披露:我是这个图书馆的作者

这是简单的解释在android开发人员参考: https : //developer.android.com/training/contacts-provider/modify-data.html#InsertEdit

和简单的附加代码:

 String phoneNumber = "+01 123 456 789"; Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); intent.putExtra(ContactsContract.Intents.Insert.PHONE, phoneNumber); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_CODE_ADD_PHONE_CONTACT); } 

如果您需要活动结果,则必须通过REQUEST_CODE_ADD_PHONE_CONTACTvariables监听Activity上的onActivityResult事件。