运用ContactModel API来读取电话本信息

原创 2016年05月31日 11:24:06

在Ubuntu的手机设计中,我们可以利用ContactModel API接口来读取我们的电话本信息.我们可以通过如下的API接口:

availableManagers 

来获取我们所有的电话本的manager.也就是有多少个电话本.通过设置:

manager 
来选择不同的电话本来读取信息.所有的电话本信息,我们可以在如下的API中读取:

contacts : list<Contact>
每个Contact包含一个电话本每个项的所有的信息:

address : Address
addresses : list<Address>
anniversary : Anniversary
avatar : Avatar
birthday : Birthday
contactDetails : list<ContactDetail>
contactId : int
displayLabel : DisplayLabel
email : EmailAddress
emails : list<EmailAddress>
extendedDetail : ExtendedDetail
extendedDetails : list<ExtendedDetail>
family : Family
favorite : Favorite
gender : Gender
geolocation : GeoLocation
globalPresence : GlobalPresence
guid : Guid
hobby : Hobby
manager : string
modified : bool
name : Name
nickname : Nickname
note : Note
onlineAccount : OnlineAccount
organization : Organization
organizations : list<Organization>
phoneNumber : PhoneNumber
phoneNumbers : list<PhoneNumber>
presence : Presence
ringtone : Ringtone
syncTarget : SyncTarget
tag : Tag
timestamp : Timestamp
type : enumeration
url : Url
urls : list<Url>
version : Version
我们可以根据我们所需要的信息来显示.

当我们显示信息的时候,我们可以通过SortOrder来排序我们的电话本中的项.

  ContactModel {
        id: mymodel
        sortOrders: [
            SortOrder {
                id: sortOrder

                detail: ContactDetail.Name
                field: Name.FirstName
                direction: Qt.DescendingOrder
            }
        ]
  ...
  }

我们也可以通过filter来过滤我们所需要的项,比如:

        filter: DetailFilter {
            id: favouritesFilter

            detail: ContactDetail.Favorite
            field: Favorite.Favorite
            value: "Yang"
            matchFlags: DetailFilter.MatchExactly
        }
这个filter将显示所有的Favorite的电话本,而如下的filter将显示lastName中有"Yang"的电话本:

        filter: DetailFilter {
            id: nameFilter

            detail: ContactDetail.Name
            field: Name.LastName
            value: "Yang"
            matchFlags: DetailFilter.MatchExactly
        }

我们的一个简单的例程如下:

Main.qml

import QtQuick 2.4
import Ubuntu.Components 1.3
import QtContacts 5.0
import Ubuntu.Components.ListItems 1.0 as ListItem

MainView {
    // objectName for functional testing purposes (autopilot-qt5)
    objectName: "mainView"

    // Note! applicationName needs to match the "name" field of the click manifest
    applicationName: "contactmodel.liu-xiao-guo"

    width: units.gu(100)
    height: units.gu(75)


    ContactModel {
        id: mymodel
        sortOrders: [
            SortOrder {
                id: sortOrder

                detail: ContactDetail.Name
                field: Name.FirstName
                direction: Qt.DescendingOrder
            }
        ]

        fetchHint: FetchHint {
            detailTypesHint: [ContactDetail.Avatar,
                ContactDetail.Name,
                ContactDetail.PhoneNumber]
        }

//        filter: DetailFilter {
//            id: favouritesFilter

//            detail: ContactDetail.Favorite
//            field: Favorite.Favorite
//            value: "Yang"
//            matchFlags: DetailFilter.MatchExactly
//        }

        filter: DetailFilter {
            id: nameFilter

            detail: ContactDetail.Name
            field: Name.LastName
            value: "Yang"
            matchFlags: DetailFilter.MatchExactly
        }
    }

    Component {
        id: highlight
        Rectangle {
            width: parent.width
            height: manager.delegate.height
            color: "lightsteelblue"; radius: 5
            Behavior on y {
                SpringAnimation {
                    spring: 3
                    damping: 0.2
                }
            }
        }
    }


    Page {
        header: PageHeader {
            id: pageHeader
            title: i18n.tr("contactmodel")
        }

        Item {
            anchors {
                left: parent.left
                right: parent.right
                bottom: parent.bottom
                top:pageHeader.bottom
            }

            Column {
                anchors.fill: parent
                spacing: units.gu(0.5)

                Label {
                    text: "The contact managers:"
                    fontSize: "x-large"
                }

                ListView {
                    id: manager
                    clip: true
                    width: parent.width
                    height: units.gu(8)
                    highlight: highlight
                    model: mymodel.availableManagers
                    delegate: Item {
                        id: delegate
                        width: manager.width
                        height: man.height
                        Label {
                            id: man
                            text: modelData
                            fontSize: "large"
                        }

                        MouseArea {
                            anchors.fill: parent
                            onClicked: {
                                manager.currentIndex = index
                                // set the contact model manager
                                mymodel.manager = modelData
                            }
                        }
                    }
                }

                Rectangle {
                    id: divider
                    width: parent.width
                    height: units.gu(0.1)
                    color: "green"
                }

                CustomListItem {
                    id: storage
                    title.text: {
                        switch (mymodel.storageLocations ) {
                        case ContactModel.UserDataStorage:
                            return "UserDataStorage";
                        case ContactModel.SystemStorage:
                            return "SystemStorage";
                        default:
                            return "Unknown storage"
                        }
                    }
                }

                // Display the contact info here
                ListView {
                    width: parent.width
                    height: parent.height - manager.height - divider.height - storage.height
                    model: mymodel
                    delegate: ListItem.Subtitled {
                        text: contact.name.firstName + " " + contact.name.lastName
                        subText: contact.phoneNumber.number
                    }
                }
            }
        }

        Component.onCompleted: {
            console.log("count of manager: " + mymodel.availableManagers.length)
        }

    }
}

运行我们的代码:


整个项目的源码在:https://github.com/liu-xiao-guo/contactmodel







版权声明:本文为博主原创文章,未经博主允许不得转载。

如何在Ubuntu OS上读取电话本信息

在这篇文章里,我来介绍如何在Ubuntu OS上上面读取电话本的信息。
  • UbuntuTouch
  • UbuntuTouch
  • 2014年09月09日 09:01
  • 994

从另一个qml文件中读取数据并显示在ListView中

http://blog.csdn.net/csfreebird/article/details/18077839 从下面的文档,你可以看到一些代码片段演示了如何创建一个简单的ListView....
  • chenyijun
  • chenyijun
  • 2015年03月31日 13:36
  • 778

java实现简单电话本

电话本 · 实现功能: · 请输入要选择的功能: 1. 新增一个联系人 2. 查找指定的联系人 3. 查找所有的联系人 4. 退出系统 功能要求: 1、新增一个联系人,联系人的姓名,性别,年龄,手机...
  • mvp_dong
  • mvp_dong
  • 2017年03月03日 21:25
  • 1121

Web API使用json读取数据

HTTP 并不是只能用在网页中。它其实还是一个强大的平台,可以用来生成一些API,暴露服务和数据。HTTP很简单灵活,还非常普及。几乎所有你能想到的平台都有HTTP库,所以HTTP服务可以囊括很大范围...
  • Vanqqqq
  • Vanqqqq
  • 2015年06月10日 13:26
  • 1279

android读取sim卡信息

package com.water.activity; import java.util.List; import android.app.Activity; import android.os...
  • tangsilian
  • tangsilian
  • 2016年05月19日 14:38
  • 2017

Android 获取系统联系人并排序

今天我要说的是获取Android手机里面联系人并按自己进行排序的方法。 在说这个之前,我只能说之前的自己真的很傻,为什么这么说呢,请大家看看之前的我是怎么做的? 之前的我:首先是通过获取系统的联系...
  • zjy_hll
  • zjy_hll
  • 2014年07月29日 21:45
  • 880

android 读取手机通讯录并显示listview

脉脉中注册时有一个,我已开启权限: 这个原理: 1、如果通讯录为空,脉脉就不让你往下进行, 2、如果没有开启权限,脉脉就不让你往下进行, 3、如果开启权限且通讯录为空,脉脉就不让你往下进行, ...
  • u012885461
  • u012885461
  • 2015年05月10日 13:03
  • 1519

运用API函数获取系统信息

API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows   API函数的方法,或者是调用Windows...
  • rongrjianxin
  • rongrjianxin
  • 2014年02月12日 22:29
  • 250

Python实现电话簿工具(代码分享)

Python实现电话簿工具(代码分享)                       By qianghaohao(CodeNutter)        最近学了下python,用python实现了...
  • qianghaohao
  • qianghaohao
  • 2016年07月30日 18:09
  • 1010

java连接MySQL版本的电话本管理系统

最近老师讲到了JDBC,以电话簿为例,系统的整理一下 要求: 1.创建数据库test中,创建一张名为telephone的表 2.telephone包含的字段有ID(主键自增)、Name、Sex、...
  • moyandede
  • moyandede
  • 2016年08月27日 11:28
  • 681
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运用ContactModel API来读取电话本信息
举报原因:
原因补充:

(最多只允许输入30个字)