J'essaie d'obtenir des contacts à partir du journal des appels. Je peux obtenir les numéros de contact des contacts principaux à l'aide de ce code:
public void getContacts(View view) { Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intentContact, 0); } public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 0) { try { to.setText(getContactInfo(intent)); } catch(NullPointerException e) { // Do nothing ;) } } } protected String getContactInfo(Intent intent) { String phoneNumber = to.getText().toString(); Cursor cursor = managedQuery(intent.getData(), null, null, null, null); while (cursor.moveToNext()) { String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); if(phoneNumber.endsWith(">")) phoneNumber += ", "+name; else phoneNumber += name; String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if ( hasPhone.equalsIgnoreCase("1")) hasPhone = "true"; else hasPhone = "false" ; if (Boolean.parseBoolean(hasPhone)) { Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); while (phones.moveToNext()) { phoneNumber = phoneNumber + " <" + phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+">"; } phones.close(); } } cursor.close(); return phoneNumber; }
3 Réponses :
Vous pouvez utiliser ContactContract.Contact.Content_strequent_uri qui vous donnera des contacts fréquemment appelés et rapprochés. P>
J'ai eu cela en utilisant ma propre version. J'ai utilisé une boîte de dialogue et la tendit le curseur au journal des appels. Voici la fonction:
public void getCallLog() { String[] callLogFields = { android.provider.CallLog.Calls._ID, android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.CACHED_NAME /* im not using the name but you can*/}; String viaOrder = android.provider.CallLog.Calls.DATE + " DESC"; String WHERE = android.provider.CallLog.Calls.NUMBER + " >0"; /*filter out private/unknown numbers */ final Cursor callLog_cursor = getActivity().getContentResolver().query( android.provider.CallLog.Calls.CONTENT_URI, callLogFields, WHERE, null, viaOrder); AlertDialog.Builder myversionOfCallLog = new AlertDialog.Builder( getActivity()); android.content.DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int item) { callLog_cursor.moveToPosition(item); Log.v("number", callLog_cursor.getString(callLog_cursor .getColumnIndex(android.provider.CallLog.Calls.NUMBER))); callLog_cursor.close(); } }; myversionOfCallLog.setCursor(callLog_cursor, listener, android.provider.CallLog.Calls.NUMBER); myversionOfCallLog.setTitle("Choose from Call Log"); myversionOfCallLog.create().show(); }
Grande solution! Pourriez-vous s'il vous plaît aidez-moi-à-vous savoir comment puis-je afficher des noms dans la boîte de dialogue plutôt que les numéros de téléphone?
il suffit de tirer un de ces: eu1.proxysite.com/... du colunindex. Je ne suis pas sûr que celui-ci est, probablement cached_name
de l'API 21 est possible d'utiliser ceci: https: //developer.android.com/reference/kotlin/androïd/provider/calllog.Calls#Cached_lookup_uri p>
Cached_Lookup_uri ajouté dans API Niveau 21 Statique Val Cached_Lookup_uri: String l'URI mis en cache pour rechercher le contact associé au téléphone nombre, s'il existe. p>
Cette valeur est généralement remplie par l'application Dialer pour la mise en cache but, il n'est donc pas garanti d'être présent et peut ne pas être à jour Si les informations de contact associées à ce numéro ont changé. p> blockQuote>