C

应用列表

演示了从 QtAndroidAutomotive.Base 模块中使用的 AndroidAppsUtils QML 组件。

"Installed Apps List in App Lister"

构建和部署示例

请参阅有关构建和部署 Android Automotive Qt 示例的具体步骤specific steps

概述

本示例演示了如何通过显示 Android 或 Android Automotive 设备中安装的应用程序列表并处理相关事件来使用 AndroidAppsUtils QML 组件。应用程序的 UI 使用 Qt Quick 创建。

启动应用程序时,除了系统应用之外的所有已安装应用程序都以 GridView 的形式显示。点击图标启动应用。每个图标也响应长按,显示额外的 MenuMenu 中包含两个可点击项,用于显示应用信息页面或卸载应用。应用列表还记录已安装或卸载的应用程序,并将它们添加到列表中,同时在相应事件上显示文本通知。

使用模型

已安装应用程序模型基于 C++ 的 QAbstractListModel,并扩展到 QML。根据需要,模型可以使用 ListViewGridView

在此示例中,使用了一个 GridView。如下所示将模型附加到网格

    GridView {
        id: gridView

        anchors {
            left: parent.left
            right: parent.right
            bottom: parent.bottom
            top: updatesText.bottom
            margins: window.marginSize
        }
        clip: true

        cellWidth: (window.isLandscape ? window.height : window.width) / 5.5
        cellHeight: cellWidth * 2

        model: AndroidAppsUtils.installedAppsModel

然后,我们设置网格的代理以使用包含应用图标的 Image 并处理长按以显示额外的 Menu 和应用名称的 Text

        delegate: Rectangle {
            id: appDelegate

            width: gridView.cellWidth - window.marginSize
            height: gridView.cellHeight - window.marginSize
            readonly property int iconSize: height / 2.25
            required property var model

            Image {
                id: appIcon

                height: appDelegate.iconSize
                width: appDelegate.iconSize
                source: appDelegate.model.AppIconString
                anchors.horizontalCenter: parent.horizontalCenter

                MouseArea {
                    id: startrightBtn

                    anchors.fill: parent
                    onClicked: AndroidAppsUtils.startApp(appDelegate.model.packageName)
                    onPressAndHold: contextMenu.popup(mouseX, mouseY)
                }

                Menu {
                    id: contextMenu

                    MenuItem {
                        enabled: !appDelegate.model.isSystemApp
                        text: "Uninstall"
                        icon.source: "icons/delete.png"
                        onClicked: AndroidAppsUtils.uninstallApp(appDelegate.model.packageName)
                    }
                    MenuItem {
                        text: "Info"
                        icon.source: "icons/info.png"
                        onClicked: AndroidAppsUtils.showAppInfo(appDelegate.model.packageName)
                    }
                }
            }

            Text {
                id: appName

                text: appDelegate.model.appName
                width: appDelegate.width
                anchors {
                    top: appIcon.bottom
                    topMargin: window.marginSize / 3
                }
                horizontalAlignment: Text.AlignHCenter
                elide: Text.ElideRight
                wrapMode: Text.Wrap
                font.pointSize: 14
                maximumLineCount: 2
            }
        }
    }

使用 API 调用

GridView 代理内部,我们可以触发对 Java API 的某些调用以执行常见的操作,例如启动、卸载和显示应用的信息。例如,启动应用

                    onClicked: AndroidAppsUtils.startApp(appDelegate.model.packageName)

AndroidAppsUtils 组件报告应用程序安装或卸载的任何事件。要接收这些信号并对此执行相应的操作,我们需要实现 Connections,如下所示

        Connections {
            target: AndroidAppsUtils
            function onAppUninstalled(message) {
                updatesText.text = qsTr("Uninstalled: %1").arg(message);
            }

            function onAppInstalled(app) {
                updatesText.text = qsTr("Installed: %1").arg(app.packageName);
            }
        }
    }

另请参阅Qt for Android.

在某些 Qt 许可证下提供。
了解更多信息。