2016-04-23 11 views
0

Ich habe versucht, Kontaktname (zB "Jose") & Kontakt Telefonnummer Typ Wert (zB "Home", "Arbeit", etc.) vom Telefon Kontakt für bestimmte Telefonnummer (z. B. "9600515852")So erhalten Sie Telefonnummern-Typenschild von gegebener Telefonnummer in Android

für diesen habe ich bellow-Code verwendet. aber ich kann Kontaktname nur erhalten. Ich bekomme App-Absturz, wenn ich versuche, den Telefonnummern-Typ zu bekommen.

Bitte führen Sie mich.

String number = getContactName(this, "9600515852"); 
Toast.makeText(getApplicationContext(),number,Toast.LENGTH_LONG).show(); 

private String getContactName(Context context, String number) { 
String TAG ="" ; 
String name = null, label=null; 
int type=0; 

// define the columns I want the query to return 
String[] projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.PhoneLookup._ID }; 

// encode the phone number and build the filter URI 
    Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 

// query time 
Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); 

     if(cursor != null) { 
      if (cursor.moveToFirst()) { 
       name =  cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 
       // type = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 
      } else { 
       Log.v(TAG, "Contact Not Found @ " + number); 
      } 
      cursor.close(); 
     } 
     return name+" - "+number; 
    } 

Antwort

0

Versuchen Sie folgendes:

type = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.TYPE)); 
0

Verwendung

name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

statt

name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 

In meinem Fall auf Schaltfläche klicken Kontaktinformationen erhalten von Kontakte-Anwendung wie diese ist . Und es funktioniert

Anruf ein Intent

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, 1); 

Behandeln Sie das Ergebnis

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
     case (1): 
      if (resultCode == Activity.RESULT_OK) { 
       Uri contactData = data.getData(); 

       Cursor c = managedQuery(contactData, null, null, null, null); 

       if (c.moveToFirst()) { 
        String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

        String resultedPhoneNum = pop.getContactNumber(id, MainActiv.this); 
        String resultedName=pop.getContactName(name, MainActiv.this); 

        contactName.setText(resultedName); 
       } 
      } 
      break; 
     } 
    } 

Hoffnung, das hilft!

0

Nun ist der richtige Ansatz, die Phone.TYPE in Ihre Projection-Abfrage aufzunehmen. Es enthält nur DISPLAY_NAME und ID und es stürzt ab, da kein Feld als "type" in Ihrer Abfrage enthalten ist.

Dies wird definitiv Ihr Problem lösen.

Verwandte Themen