代码之家  ›  专栏  ›  技术社区  ›  Uriel Arvizu

如何在Android中查询所有保存的电话号码,包括从外部应用程序导出的号码?

  •  0
  • Uriel Arvizu  · 技术社区  · 5 年前

    我试图在Android上查询联系人的所有电话号码,目前我使用以下方法显示联系人:

    private void showContactsList(){
        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT);
    }
    

    我的活动结果如下:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch(requestCode){
            case PICK_CONTACT :
                if(resultCode == Activity.RESULT_OK){
                    phoneNumbersList = new ArrayList<>();
                    Uri contactData = data.getData();
                    Cursor c = getContentResolver().query(contactData, null, null, null, null);
                    if(c.moveToFirst()){
                        final String contactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                        String hasNumber = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
    
                        if(Integer.valueOf(hasNumber) == 1){
    
                            Cursor phoneNumbers = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId,
                                    null,
                                    null);
                            while(phoneNumbers.moveToNext()){
                                String phoneNumber = phoneNumbers.getString(phoneNumbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                if(phoneNumber.length() >= 10){
                                    phoneNumber = phoneNumber.replace(" ", "");
                                    if(phoneNumber.length() > 10){
                                        phoneNumber = phoneNumber.substring(phoneNumber.length() - 10);
                                    }
                                    phoneNumbersList.add(phoneNumber);
                                }
                            }
                            itemSelected = 0;
                            AlertDialog.Builder builder = new AlertDialog.Builder(this);
                            builder.setTitle(getResources().getString(R.string.contacts_title));
                            builder.setSingleChoiceItems(phoneNumbersList.toArray(new String[phoneNumbersList.size()]), itemSelected, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    itemSelected = i;
                                }
                            });
                            builder.setPositiveButton(getResources().getString(R.string.ok_string), new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    String selectPhoneNumber = phoneNumbersList.get(itemSelected);
                                    editNumero.setText(selectPhoneNumber);
                                    editConfirme.setText(selectPhoneNumber);
                                    dialogInterface.dismiss();
                                }
                            });
                            builder.show();
                        }
                    }
                }
        }
    }
    

    这将显示一个对话框,要求用户选择一个电话号码,遗憾的是,只显示保存到设备中的电话号码,从Whatsapp或Telegram等应用程序保存的电话号码不会显示在查询结果中。例如,如果选择了从电报导入的联系人,则hasNumber的值为0,即使该联系人确实有电话号码。

    如何修改查询以同时检索这些电话号码?

    0 回复  |  直到 5 年前