Whatsappの連絡先を電話から取得しようとしましたが、whatsappの連絡先の総数を取得していますが、RawContacts
からは、知らないwhatsappの番号と名前を取得する方法を教えてください。私は解決策を見つけようとしましたが、その正確な解決策を得ることができません。私を助けてください。
コードを下に配置します。
ContentResolver cr = context.getContentResolver();
Cursor c = cr.query(
ContactsContract.RawContacts.CONTENT_URI,
new String[] { ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY },
ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?",
new String[] { "com.whatsapp" },
null);
ArrayList<String> myWhatsappContacts = new ArrayList<>();
String projection[] = { ContactsContract.CommonDataKinds.Phone.NUMBER };
if(c != null) {
if (c.getCount() > 0) {
while (c.moveToNext()) {
String whatsappContactId = c.getString(c.getColumnIndex(ContactsContract.RawContacts.Data._ID));
Cursor dataCursor = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{whatsappContactId}, null);
// You can also read RawContacts.CONTACT_ID to read the
// ContactsContract.Contacts table or any of the other related ones.
String number = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER));
myWhatsappContacts.add(number);
}
}
}
showLogI(TAG, " WhatsApp contact size : " + myWhatsappContacts.size());
私は自分の質問の解決策を見つけたので、ここに自分の答えを入れます。他の人に役立つかもしれません。
まず、Android Contacts Data Storeの図を読んで理解してください。その後、連絡フロー全体が理解しやすくなります。3層のデータモデル図がスニペットの下に示されています。
コードスニペット
//This class provides applications access to the content model.
ContentResolver cr = context.getContentResolver();
//RowContacts for filter Account Types
Cursor contactCursor = cr.query(
ContactsContract.RawContacts.CONTENT_URI,
new String[]{ContactsContract.RawContacts._ID,
ContactsContract.RawContacts.CONTACT_ID},
ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?",
new String[]{"com.whatsapp"},
null);
//ArrayList for Store Whatsapp Contact
ArrayList<String> myWhatsappContacts = new ArrayList<>();
if (contactCursor != null) {
if (contactCursor.getCount() > 0) {
if (contactCursor.moveToFirst()) {
do {
//whatsappContactId for get Number,Name,Id ect... from ContactsContract.CommonDataKinds.Phone
String whatsappContactId = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
if (whatsappContactId != null) {
//Get Data from ContactsContract.CommonDataKinds.Phone of Specific CONTACT_ID
Cursor whatsAppContactCursor = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME},
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{whatsappContactId}, null);
if (whatsAppContactCursor != null) {
whatsAppContactCursor.moveToFirst();
String id = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
String name = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
whatsAppContactCursor.close();
//Add Number to ArrayList
myWhatsappContacts.add(number);
showLogI(TAG, " WhatsApp contact id : " + id);
showLogI(TAG, " WhatsApp contact name : " + name);
showLogI(TAG, " WhatsApp contact number : " + number);
}
}
} while (contactCursor.moveToNext());
contactCursor.close();
}
}
}
showLogI(TAG, " WhatsApp contact size : " + myWhatsappContacts.size());