我正在通过 firebase 使用 Google 身份验证,并且正在成功登录用户。我还从电话簿(设备)中检索了联系人列表,并将其显示在我的应用程序 fragment 中的 ListView 上。但现在我希望向我的联系人中的用户显示安装了我的应用程序,这样,当单击时,他们将进入与他们的私有(private)聊天,其他联系人在单击时将使他们能够发送应用程序邀请。简而言之:我想查看设备上安装了该应用程序的联系人列表。
最佳答案
我通过三个简单的步骤实现了这一目标。
- 获取您的手机联系人列表
- 获取 Firestore 上所有电话号码的列表
- 比较两个列表并返回共同元素。
为了使用我的方法,您需要在 Firestore 上有一个集合,其中包含所有用户的电话号码作为文档,如下图所示:
步骤如下:
第 1 步:我使用 ContentResolver 获取了所有用户联系人的列表。如果您已获得 READ_CONTACTS
权限,则可以使用以下方法检索此列表。
public ArrayList<String> getContacts(ContentResolver cr) {
// list to be returned
ArrayList<String> numbers = new ArrayList<>();
// cursor
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if ((cur != null ? cur.getCount() : 0) > 0) {
while (cur != null && cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
if (cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
while (pCur.moveToNext()) {
String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.i(TAG, "Name: " + name);
numbers.add(formatRightWay(phoneNo));
}
pCur.close();
}
}
}
if(cur!=null){
cur.close();
}
return numbers;
}
第 2 步:通过获取 user
集合的文档 ID,我获得了 Firestore 上所有电话号码的列表。这是一个快速实现:
firestore.collection("users").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<String> list = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getId());
}
// this is the list you need
Log.d(TAG, list.toString());
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
第 3 步:编写一个方法来比较两个列表并返回相似的元素。
public static ArrayList<String> shuffleBothLists(ArrayList<String> phoneContacts, List<String> firebaseContacts) {
ArrayList<String> result = new ArrayList<>();
for(String s: firebaseContacts) {
if(phoneContacts.contains(s) && !result.contains(s)) {
result.add(s);
}
}
return result;
}
上述方法返回的列表是安装了该应用的联系人。
干杯!
关于java - Firebase:Android:如何显示安装了该应用程序的联系人列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45385663/