Java 如何从联系人处获取手机号码

Java 如何从联系人处获取手机号码,java,android,Java,Android,我的应用程序需要从联系人列表中选择联系人,然后仅从所选联系人中获取姓名和手机号码以将其存储在应用程序中,我成功获取姓名,但如何验证联系人是否有手机号码(不是家庭号码),然后获取号码 我如何检查联系人是否有一个或多个手机号码 在android中,联系人姓名和号码保存在不同的ContentProvider中,以便从下面的代码中获取联系人id cur=cr.query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Com

我的应用程序需要从联系人列表中选择联系人,然后仅从所选联系人中获取姓名和手机号码以将其存储在应用程序中,我成功获取姓名,但如何验证联系人是否有手机号码(不是家庭号码),然后获取号码


我如何检查联系人是否有一个或多个手机号码

在android中,联系人姓名和号码保存在不同的ContentProvider中,以便从下面的代码中获取联系人id

  cur=cr.query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER +" > 0", null, null);
      cur.moveToFirst();
      while(cur.isAfterLast()==false){
        //    Log.e("Name is:",cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
              Fid=Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)));

              int id=Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)));
              Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null, null, null);

              pCur.moveToFirst();
              while (pCur.isAfterLast()==false) {
                  int idinner=Integer.parseInt(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)));
                  if(idinner==id){ 

//Add id to Array

                 }
                 pCur.moveToNext();
            }
          cur.moveToNext();
      }
除此之外,您还可以获得手机号码和其他详细信息

public String getNo(String[] no){

    String seleContact="";  
//  String[] contactNos=new String[no.length];
    for(int i=0;i<no.length;i++){
        if(no[i].trim().toString().equalsIgnoreCase("")){
            break;
        }
        int id=Integer.parseInt(no[i]);
        //Cursor cur=cr.query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID +" = "+id, null, null);
        //cur.moveToFirst();

        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+id, null, null);
        pCur.moveToFirst();

        while(pCur.isAfterLast()==false){
                 if(Integer.parseInt(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)))==(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)){
    //               String uname=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)).toString();
                     String tempMoNo=pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                     Log.e("Activity result selelength is",String.valueOf(seleContact.length()));
                     String[] temp=tempMoNo.split("-");
                     String MoNo="";
                     int le=temp.length;
                     for(int j=0;j<le;j++){
                         MoNo +=temp[j];
                     }

                     if (seleContact.length() > 0) {
                            seleContact += "," + (MoNo);
                        } else {
                            seleContact += (MoNo);
                            }            
                 }
            pCur.moveToNext();
             }
        pCur.close();
    }

    return seleContact;
}
公共字符串getNo(字符串[]no){
字符串seleContact=“”;
//String[]contactNos=新字符串[no.length];

对于(int i=0;i当您从联系人处获取电话号码时,可以检查其类型。请查看phone.type_xxx常量。同时,请记住,电话号码的类型由设备所有者设置,在许多情况下,这些类型都不正确。例如,在我的手机上,大多数联系人电话号码都是手机号码,yet它们以“type_CUSTOM”类型保存,并在联系人详细信息中显示为“DEFAULT”。哦,仅仅查看电话号码也不会给你答案。尽管电话号码的type_xxx不可靠,但你最好还是依赖它。这实际上很有帮助,Thaank u:)