Документация
ОС Аврора 5.0.1

Пример использования QML-модуля Share

Для того, чтобы приложение могло быть отображено в диалоге Поделиться, необходимо в desktop-файл добавить описания методов обмена данными. Каждый метод должен быть указан в поле X-Share-Methods и иметь свой собственный раздел [X-Share Method …] в desktop-файле.

Название блока [X-Share Method …] должно соответствовать названию в X-Share-Methods. Например, строке X-Share-Methods=images; соотвествует раздел [X-Share Method images].

В блоке [X-Share Method …] в поле Capabilities указывается один или несколько mime-типов. Несколько типов указываются через ";". Примеры:

Capabilities=image/*
Capabilities=image/;video/

Краткое описание метода совместного доступа, которое будет отображаться в диалоговом окне Поделиться, можно указать в строке Description= блока [X-Share Method …]. Например: Description=Image share demo.

Описание может быть переведено на другие языки с помощью указания локали, например, [ru_RU] для русского языка. Пример перевода: Description[ru]=Демо обмена изображениями. По умолчанию используется не локализованная версия из строки Description=.

Если приложение обрабатывает список файлов, необходимо в блоке [X-Share Method …] указать флаг SupportsMultipleFiles=yes. Также этот флаг влияет на то, будет ли отображаться приложение в списке диалога Поделиться, если пользователь хочет поделиться группой файлов.

Пример desktop-файла:

[Desktop Entry]
Type=Application
X-Nemo-Application-Type=silica-qt5
Icon=ru.auroraos.ShareDemo
Exec=/usr/bin/ru.auroraos.ShareDemo
Name=Share Demo
Name[ru]=Демо обмена
X-Share-Methods=images;
X-Maemo-Service=ru.auroraos.ShareDemo
X-Maemo-Method=ru.auroraos.ShareDemo.activateWindow

[X-Application]
Permissions=UserDirs
OrganizationName=ru.auroraos
ApplicationName=ShareDemo
ExecDBus=/usr/bin/org.ShareDemo --dbus-launch

[X-Share Method images]
Description=Image share demo
Description[ru]=Демо обмена изображениями
Capabilities=image/*
SupportsMultipleFiles=yes

Список зарегистрированных провайдеров для Share: /var/lib/sailfish-share/desktopfiles.list.

Ключ ExecDBus используется для указания команды запуска приложения при запросе к соответствующей службе D-Bus. Дополнительный аргумент --dbus-launch позволяет определить, что запуск происходил именно через D-Bus. Совместно с ключом ExecDBus используются ключи X-Maemo-Service и X-Maemo-Method, содержащие соответственно название службы и метод, вызываемый при обращении к службе.

Если данные ключи не будут указаны, произойдёт ошибка активации окна, выраженная следующим образом. При первом запуске приложения окно не будет создано, а также не произойдёт вызов совместного доступа. При повторном запуске приложение не будет запущено из-за наличия работающего экземпляра приложения в фоновом режиме (без окна активации).

В функции main необходимо зарегистрировать службу D-Bus, которая будет использоваться для активации приложения:

int main(int argc, char *argv[])
{
    QScopedPointer<QGuiApplication> application(SailfishApp::application(argc, argv));
    application->setOrganizationName(QStringLiteral("ru.auroraos"));
    application->setApplicationName(QStringLiteral("ShareDemo"));

    QScopedPointer<QQuickView> view(SailfishApp::createView());
    view->setSource(SailfishApp::pathTo(QStringLiteral("qml/ShareDemo.qml")));
    if (!application.arguments().contains("--dbus-launch"))
        view->show();

    QDBusConnection::sessionBus().registerService("ru.auroraos.ShareDemo");

    return application->exec();
}

В ApplicationWindow для каждого X-Share Method необходимо добавить соответствующий ShareProvider:

ApplicationWindow {
    id: applicationWindow

    initialPage: Component { ImagesPage { model: imagesModel } }
    cover: Qt.resolvedUrl("cover/DefaultCoverPage.qml")
    allowedOrientations: defaultAllowedOrientations

    ListModel { id: imagesModel }

    ShareProvider {
        method: "images"
        capabilities: ["image/*"]

        onTriggered: {
            imagesModel.clear()
            for (var iResource = 0; iResource < resources.length; ++iResource)
                imagesModel.append({ "filePath": resources[iResource].filePath })

            applicationWindow.activate()
        }
    }
}

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.