从手机的电话簿中检索联系人

Posted

技术标签:

【中文标题】从手机的电话簿中检索联系人【英文标题】:Retrieve contact from mobile's phone directory 【发布时间】:2017-01-24 22:00:54 【问题描述】:

此代码可以打开移动设备上的内置联系人目录。但是,当我选择一个联系人时,应用会报告“完成”,但不会检索联系人号码——用户无法发送消息。

如何找回联系电话? List View 不是解决方案:我只需要返回一个数字,而不是额外的信息。

这是我的代码:

public EditText no;
public EditText msg;
public Button cancel;
public Button snd;
public String Number,name,Message;
public int run=0;
public static final int PICK_CONTACT=1;



public void callContacts(View v)

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

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

    super.onActivityResult(reqCode,resultCode,data);
    if(reqCode==PICK_CONTACT)
    
        if(resultCode== ActionBarActivity.RESULT_OK)
        
            Uri contactData = data.getData();
            Cursor c = getContentResolver().query(contactData,null,null,null,null);
            if(c.moveToFirst())
            
                name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.CONTENT_URI.toString()));
                Toast.makeText(this,"done",Toast.LENGTH_SHORT).show();
            
        
    

这里是onCreate 方法

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_second);

    no = (EditText)findViewById(R.id.num);
    msg = (EditText)findViewById(R.id.sms);
    cancel = (Button)findViewById(R.id.cancel);
    snd = (Button)findViewById(R.id.snd);
    no.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            msg.setText("");
            no.setText("");
            callContacts(null);
        
    );
    snd.setOnClickListener(new View.OnClickListener()
    
        @Override
        public void onClick(View v)
        
            Number = no.toString();
            Message = msg.getText().toString();
            SmsManager manager = SmsManager.getDefault();
            ArrayList<String>long_sms = manager.divideMessage(Message);
            manager.sendMultipartTextMessage(Number,null,long_sms,null,null);
            Toast.makeText(getApplicationContext(),"Sent Successfully",Toast.LENGTH_SHORT).show();
        
    );

【问题讨论】:

收紧措辞;更正语法。 Pick a Number and Name From Contacts List in android app的可能重复 【参考方案1】:

这是仅用于从联系人列表中选择一个电话号码的代码。我发现这段代码最简单。如果有任何问题,请告诉我。

以选择手机数据类型的意图开始活动:

findViewById(R.id.choose_contact_button).setOnClickListener(new View.OnClickListener() 
      @Override
      public void onClick(View v) 
            Intent pickContact = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
            startActivityForResult(pickContact, PICK_CONTACT_REQUEST);
      
 );

现在设置 onAcitivityResult();

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
        switch (requestCode)
            case PICK_CONTACT_REQUEST:
                if (resultCode == RESULT_OK)
                    Uri contactUri = intent.getData();
                    Cursor nameCursor = getContentResolver().query(contactUri, null, null, null, null);
                    if (nameCursor.moveToFirst())
                        String name = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        String number = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        ((EditText)findViewById(R.id.person_name)).setText(name);
                        ((EditText)findViewById(R.id.enter_mobile)).setText(number);
                        nameCursor.close();
                    
                
                break;
        
    

【讨论】:

以上是关于从手机的电话簿中检索联系人的主要内容,如果未能解决你的问题,请参考以下文章

从 Android 中的 URI 检索联系人电话号码

从 iphone 中检索联系人

Android 手机联系人仅包含照片、电话和姓名

使用选择意图从电话簿中检索保存的地址

从 Android 联系人中检索电话号码在三星上不起作用

在使用 SimpleCursorAdapter 时从联系人 ID 中检索和显示联系人姓名