2017-05-20 1 views
0

Je veux obtenir le numéro de téléphone d'un contact par programmation en ne demandant que le nom, sans afficher l'activité de mes contacts.Puis-je récupérer un numéro de téléphone à partir de mes contacts sans ouvrir une intention?

Est-ce possible? et comment?

J'ai essayé le suivant mais je reçois une erreur d'autorisation, même si j'ai ma configuration d'autorisation dans le manifeste

ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 



    ArrayList<String> contact_names = new ArrayList<String>(); 

    if (cur.getCount() > 0) 
    { 
     while (cur.moveToNext()) 
     { 
      String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = "GIAGIA"; 
      if (cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER.trim())).equalsIgnoreCase("1")) 
      { 
       if (name!=null){ 
        //contact_names[i]=name; 

        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); 
        while (pCur.moveToNext()) 
        { 
         String PhoneNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

         Toast.makeText(getBaseContext(),PhoneNumber ,Toast.LENGTH_LONG).show(); 
         //i++; 
         break; 
        } 
        pCur.close(); 
        pCur.deactivate(); 
        // i++; 
       }else 
       { 
        Toast.makeText(getBaseContext(),"Does not exist",Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
     cur.close(); 
     cur.deactivate(); 
    } 

    String[] contactList = new String[contact_names.size()]; 

    for(int j = 0; j < contact_names.size(); j++){ 
     contactList[j] = contact_names.get(j); 
    } 

    return contactList; 
} 
+0

s'il vous plaît poster l'erreur que vous obtenez, aussi, 'demander seulement le name' - vous voulez demander à l'utilisateur le nom du contact? Et s'il y a deux contacts du même nom? – marmor

Répondre

0

Si ce que vous entendez faire est d'obtenir un nom de contact de l'utilisateur et de trouver un numéro de téléphone dans le Contacts DB, cela devrait fonctionner:

public List<String> getPhoneNumbersByName(String name) { 
    List<String> phones = new ArrayList<>(); 
    String[] projection = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER }; 
    Cursor cur = cr.query(Phone.CONTENT_URI, projection, Phone.DISPLAY_NAME + "=?", new String[]{ name }, null); 
    while (cur != null && cur.moveToNext()) { 
     phones.add = cur.getString(1); 
    } 
    if (cur != null) { 
     cur.close(); 
    } 
    return phones; 
} 

notes:

  1. Il peut y avoir plus e En un contact avec le même nom, tous les numéros correspondant à ce nom seront renvoyés.
  2. Plusieurs numéros peuvent être enregistrés pour chaque contact. Cette fonction renvoie donc une liste de téléphones
  3. Le nom doit être un correspondance exacte, vous pourrez vous détendre cette limitation en changeant la sélection pour être insensible à la casse et/ou utiliser l'option « LIKE » de Sqlite