gpt4 book ai didi

java - Firebase:Android:如何显示安装了该应用程序的联系人列表

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:47 25 4
gpt4 key购买 nike

我正在通过 firebase 使用 Google 身份验证,并且正在成功登录用户。我还从电话簿(设备)中检索了联系人列表,并将其显示在我的应用程序 fragment 中的 ListView 上。但现在我希望向我的联系人中的用户显示安装了我的应用程序,这样,当单击时,他们将进入与他们的私有(private)聊天,其他联系人在单击时将使他们能够发送应用程序邀请。简而言之:我想查看设备上安装了该应用程序的联系人列表。

最佳答案

我通过三个简单的步骤实现了这一目标。

  • 获取您的手机联系人列表
  • 获取 Firestore 上所有电话号码的列表
  • 比较两个列表并返回共同元素。

为了使用我的方法,您需要在 Firestore 上有一个集合,其中包含所有用户的电话号码作为文档,如下图所示:

enter image description here

步骤如下:

第 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com