android手机,新建联系人在通讯录无法显示。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android手机,新建联系人在通讯录无法显示。相关的知识,希望对你有一定的参考价值。

但是使用搜索功能时又能搜到该联系人。这是什么原因?

你没有添加对,添加时在别在姓名栏里输入电话号码或在电话号码栏里输入姓名,再试试,我刚试过没问题的 参考技术A 因为你没有给联系人分组,GMAIL联系人中不会显示未分组的联系人,所以你在联系人那里点菜单键-显示选项-所有联系人勾上就可以了。 参考技术B 手机号一项必须得填,哪怕你写个0都成。否则,创建的就为空,通讯录就不显示。

无法在物理设备上获取联系人-iOS

【中文标题】无法在物理设备上获取联系人-iOS【英文标题】:Contacts Not Fetching On Physical Device-iOS 【发布时间】:2018-05-13 01:18:34 【问题描述】:

我目前正在尝试使用 TestFlight 测试我的 iOS 应用程序,但在获取联系人时遇到了一些问题。我的应用程序应该检索通讯录中的所有联系人,然后在检查 firebase 以确保联系人尚未被邀请到应用程序后将它们显示在表格视图中。它在有 10 个联系人的模拟器上运行良好,但在我的有 100 多个联系人的手机上根本不起作用。甚至没有联系人出现。我检查了我是否也启用了联系人。不确定问题可能是什么。我附上了以下代码:

override func viewDidLoad() 
    super.viewDidLoad()

    contactStore.requestAccess(for: .contacts)  (success, error) in
        if success
            print("Contact Authorization Successful")
        
    
    fetchContacts()
    tableView.delegate = self
    tableView.dataSource = self

func fetchContacts()
    contacts = [ContactStruct]()
    let key = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey, CNContactThumbnailImageDataKey] as [CNKeyDescriptor]
    let request = CNContactFetchRequest(keysToFetch: key)
    try! contactStore.enumerateContacts(with: request)  (contact, stoppingPointer) in
        let name = contact.givenName
        let familyName = contact.familyName
        let fullName = contact.givenName + contact.familyName
        let number = (contact.phoneNumbers[0].value ).value(forKey: "digits") as! String
        let contactImage = contact.imageData


        let phone = (contact.phoneNumbers[0].value ).value(forKey: "digits") as! String

            self.phoneNumbersArray.append(phone)


        let contactToAppend = ContactStruct(givenName: name, familyName: familyName, fullName: fullName, phoneNumber: number, contactImage: contactImage)

        self.contacts.append(contactToAppend)
        self.tableView.reloadData()
    
    getAllUsers()



func getAllUsers()
    self.sectionData = [0: self.contactsOnApp as Array<AnyObject>, 1: self.usersInSchool as Array<AnyObject>, 2: self.contacts as Array<AnyObject>]
    ref.child("users").child(uid!).observeSingleEvent(of: .value, with:  (snapshot) in
        let user = User(snapshot: snapshot)
        let currentUserSchool = user.highSchool!

        for child in user.invitesFormatted 
            let checkInvites = child
                if let alreadyInvited = self.contacts.index(where: $0.phoneNumber == checkInvites)
                    self.contacts.remove(at: alreadyInvited)
                    self.sectionData = [0: self.contactsOnApp as Array<AnyObject>, 1: self.usersInSchool as Array<AnyObject>, 2: self.contacts as Array<AnyObject>]
                    self.tableView.reloadData()
                
        

        ref.child("schools").child(currentUserSchool).child("members").observeSingleEvent(of: .value, with:  (snap) in

            for child in snap.children

                let child = child as? DataSnapshot
                if let otherUsers = child?.key 
                    ref.child("users").child(otherUsers).observeSingleEvent(of: .value, with:  (snappy) in
                        let personInSchool = User(snapshot: snappy)

                        if personInSchool.uid != uid! && self.phoneNumbersArray.contains(personInSchool.phoneNumber) 
                            //If contacts does have user
                            self.contactsOnApp.append(personInSchool)

                                if let itemToRemoveIndex = self.contacts.index(where: $0.phoneNumber == personInSchool.phoneNumber) 
                                        self.contacts.remove(at: itemToRemoveIndex)
                               
                        else if personInSchool.uid != uid! 
                            //If contacts doesn't have user
                            self.usersInSchool.append(personInSchool)   
                        
                        self.sectionData = [0: self.contactsOnApp as Array<AnyObject>, 1: self.usersInSchool as Array<AnyObject>, 2: self.contacts as Array<AnyObject>]
                        self.tableView.reloadData()
                    )
                
            
        )
    )

任何帮助将不胜感激。谢谢!

【问题讨论】:

您需要将调用移动到fetchContacts 以在调用requestAccess 的完成处理程序中并且仅当successtrue 时。 @rmaddy 好的,我试试,但是为什么它在模拟器上可以运行,而在设备上却不行? 你也有很多电话给reloadData。为什么不在所有数据完全加载后调用一次呢? @rmaddy 主要是因为我不确定数据何时/何地完全加载,因为 firebase 函数是异步的。有没有要加的地方?另外,你知道为什么它仍然可以在模拟器上运行吗? 您可能在某个时候授予了访问权限。在模拟器或真机上删除并重新测试。做一些调试,看看哪里没有按预期工作。 【参考方案1】:

只有在设备授予应用访问权限的情况下,您才能获取联系人。我的猜测是您没有授予应用程序访问权限,因此您的 fetchContacts() 将永远无法工作。

在真实设备上重新安装应用。如果您请求正确使用用户联系人的权限,那么这应该会触发应用程序请求使用。确保在弹出消息上单击是。您还可以检查“设置”应用下的“应用设置”并重新启用该应用以允许访问联系人。

【讨论】:

一开始我以为是这样,但我已经检查了多次,即使在删除并重新安装应用程序后,每次都启用了联系人。

以上是关于android手机,新建联系人在通讯录无法显示。的主要内容,如果未能解决你的问题,请参考以下文章

android怎么 添加联系人到手机

QQ通讯录(Android)如何增加分组?

Android 简易手机通讯录(源码)

android开发怎样获取通讯录联系人信息

QQ通讯录2.2 android版 怎么给联系人分组??大神们帮帮忙

怎么添加android新建联系人