在Ubuntu平台上面,我们可以使用History API来读取电话本及短信的内容,并使用listview来显示出来。下面我们来展示该怎么做。
1)创建一个基本的QML应用
我们使用Qt Creator来创建一个最基本的QML应用。我们选择使用“App with Simple UI"模版来创建我们的应用。
为了使用History API, 我们必须引入
import Ubuntu.History 0.1
ComboButton { id: type expanded: false text: "Voice" ListView { model: typemodel delegate: ListItem.Standard { text: modelData onClicked: { console.log("item is clicked!" + index + " " + name); type.expanded = false; type.text = text; console.log("type is: " + type.text); if ( name === "Voice") { historyEventModel.type = HistoryThreadModel.EventTypeVoice; listView.model = historyEventModel } else if ( name === "Text" ) { historyEventModel.type = HistoryThreadModel.EventTypeText; listView.model = historyEventModel } else if ( name === "Thread") { listView.model = historyThreadModel } } } } }这里我们可以参考ComboButton来更加多了解如何使用这个控件。这里,我们提供了三个选项"Voice", "Text" 及“Thread"。同时我们也创建了俩个不同的history model。
HistoryEventModel { id: historyEventModel filter: HistoryFilter {} type: HistoryThreadModel.EventTypeVoice sort: HistorySort { sortField: "timestamp" sortOrder: HistorySort.DescendingOrder } } SortProxyModel { id: sortProxy sortRole: HistoryEventModel.TimestampRole sourceModel: historyEventModel ascending: false } HistoryThreadModel { id: historyThreadModel <pre name="code" class="javascript"><span style="white-space:pre"> </span>filter: HistoryFilter {}sort: HistorySort { sortField: "lastEventTimestamp" sortOrder: HistorySort.DescendingOrder } }
由于一些性能方面的原因的考虑,目前我们必须把filter设置为空,即:
filter: HistoryFilter {}
我们同时也把上面定义的model和我们的ListView一起连接起来:
ListView { id: listView width: parent.width height: parent.height - type.height Component { id: sectionDelegate Text { text: section } } model: historyEventModel delegate: ... }
目前似乎一切都已经好了。接下来我们来运行我们的应用到手机中。我们会发现在手机中没有任何的history的东西显示。问题出现在哪里呢?
我们开启一个terminal,然后打入如下的命令:
$adb shell
然后再在手机中的命令行输入:
root@ubuntu-phablet:~# grep "DENIED" /var/log/syslog
我们可以看到如下的图片:
显然,我们遇到了一个安全的问题。为了接的这个问题,我们必须在应用中加入它所需要的policy。
我们再重新运行程序。在手机上,我们可以看到如下的画面:
我们再也没有security的问题了。整个工程的源码在如下的地址可以下载:
bzr branch lp:~liu-xiao-guo/debiantrial/history