怎么在Ubuntu平台上面读取电话及短信记录(History API)

254 阅读2分钟

在Ubuntu平台上面,我们可以使用History API来读取电话本及短信的内容,并使用listview来显示出来。下面我们来展示该怎么做。

\

1)创建一个基本的QML应用

我们使用Qt Creator来创建一个最基本的QML应用。我们选择使用“App with Simple UI"模版来创建我们的应用。

\

\

\

\

\

为了使用History API, 我们必须引入

\

import Ubuntu.History 0.1

\

为了能够使我们读取不同的history,我们先来做一个ComboButton。它的设计如下:

\

            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        
	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\

\

\

\

\

\