Android联系人列表使用Firebase数据库查看与Whatsapp相同的内容

时间:2016-12-12 05:23:59

标签: android firebase firebase-realtime-database android-contacts whatsapp

Whatsapp使用什么方法为不在Whatsapp上的联系人显示“邀请”按钮?

我还想在联系人列表视图中显示一个按钮,仅显示Firebase数据库中我的应用程序中不存在的按钮。

我正在使用Custom BaseAdapter在列表视图中显示联系人。 能否帮助我了解Whatsapp Contact的工作原理?

我的问题不重复,因为这只是阅读联系人列表。我想根据firebase数据显示“邀请”按钮。

谢谢!

2 个答案:

答案 0 :(得分:0)

嗯,我不确定whatsapp究竟使用了什么,但是我可以在whatsapp上显示的联系人出现在最后。因此,您可以从您的firebase Db转储联系人列表,然后查询设备中的联系人并制作两个arraylist,其中一个在您的应用程序中有联系人列表意味着您的应用程序用户然后另一个是新用户然后合并他们并显示在根据您的要求使用Recyclerview或Listview,对于邀请按钮,您可以使用不同的单元格布局,通过在数组列表中设置任何bool并在基础适配器中检查它,或者您也可以在同一单元格中根据数据设置其可见性。你的arraylist。

答案 1 :(得分:0)

首先,您必须从客户端设备获取所有联系人,

注意:您必须自己检查联系人权限,并且不要忘记添加权限清单。

在onCreate或检查权限后调用initData()。

这是从客户端设备获取联系人的代码。

private void initData() {
    Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null,null);
    while(Objects.requireNonNull(cursor).moveToNext()){
        String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        // Finds the contact in our database through the Firebase Query to know whether that contact is using our app or not.
        findUsers(number);
    }
}

从客户端设备一个接一个地获取每个联系人的同时,我们将触发firebase查询,以检查该联系人是否正在使用我们的应用。

因此,我们正在使用“ findUser”方法来检查该联系人是否正在使用我们的应用程序。

private void findUsers(final String number){
    Query query = FirebaseDatabase.getInstance().getReference()
            .child("User")
            .orderByChild("phone")
            .equalTo(number);

    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.getValue() != null){
                Map<String, Object> map = (Map<String, Object>) snapshot.getValue();
                // this will print whole map of contacts who is using our app from clients contacts.
                Log.d("ContactSync", snapshot.getValue().toString());
                // so you can use any value from map to add it in your Recycler View.
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Log.d("ContactSync", error.getMessage());
        }
    });
}

这是我的数据库结构的样子。 database structure image

感谢您阅读此答案, 希望对您有所帮助!