Поделиться через


Связь с телефоном для непрерывности задач между устройствами

Мобильное приложение может программно предоставлять доступ к последним URL-адресам веб-сайта и ссылкам на документ на компьютер с Windows, настроив Связь с телефоном. Эта функция непрерывности задач доступна на устройствах Android, интегрированных с интерфейсом "Связь с Windows".

Эта функция доступна только на поддерживаемых устройствах для Связь с телефоном интерфейсов.

В этой документации описано, как интегрировать приложение с API непрерывности задач Связь с телефоном, включая требования к сценариям, область поверхности и утверждение функции ограниченного доступа (LAF).

Дополнительные сведения о Связь с телефоном. Синхронизация смартфона с компьютером Windows.

Требования к сценарию

API непрерывности задач позволяет синхронизировать содержимое из приложения Android с компьютером с Windows, настроив Связь с телефоном. Для предоставления доступа к этому API необходимо выполнить следующие условия:

  • ВЕБ-URL-адреса синхронизации, которые являются допустимыми URL-адресами, доступными на компьютере с Windows
  • Ссылки на облачные документы do sync, доступные компьютером Windows
  • Синхронизация локальных документов с компьютером Windows, который должен быть доступен на мобильном устройстве с помощью приложения.
  • Не синхронизировать более 60 раз в минуту
  • НЕ синхронизируйте содержимое, если пользователь не взаимодействует с вашим приложением

Связь с телефоном будет отображать содержимое синхронизации в узле "Приложения" в разделе "Недавно использованные" и "Последние веб-сайты" и во всплывающем элементе уведомлений.

Связь с телефоном снимок экрана с недавно используемыми приложениями и веб-сайтами

Утверждение функции ограниченного доступа (LAF)

Связь с телефоном непрерывность задач — это функция ограниченного доступа (LAF). Чтобы получить доступ к этому API, необходимо получить утверждение от Корпорации Майкрософт для взаимодействия с предварительно загруженным пакетом Связь с Windows на мобильных устройствах Android.

Чтобы запросить доступ, отправьте сообщение электронной почты wincrossdeviceapi@microsoft.com с указанными ниже сведениями.

  • Описание пользовательского интерфейса
  • Снимок экрана: приложение, в котором пользователь обращается к веб-сайту или документам
  • PackageId приложения
  • Ссылка на магазин Google Play для приложения

Если запрос утвержден, вы получите инструкции по разблокировке функции. Утверждения будут основаны на ваших сообщениях, если ваш сценарий соответствует требованиям сценария , описанным выше.

Обработка данных

Используя API непрерывности задач Связь с телефоном, корпорация Майкрософт будет обрабатывать и передавать данные в соответствии с соглашением о службах Майкрософт и заявлением о конфиденциальности Майкрософт. Данные, передаваемые на связанные устройства пользователя, могут обрабатываться через облачные службы Майкрософт, чтобы обеспечить надежную передачу данных между устройствами. Данные, обрабатываемые этим API, не сохраняются облачными службами Майкрософт, подлежащими контролю пользователей.

Пакет SDK для нескольких устройств, который будет интегрироваться в пакет, гарантирует, что данные, предоставленные API, обрабатываются только доверенными пакетами Майкрософт.

Чтобы интегрировать мобильное приложение Android с API непрерывности задач Связь с телефоном, необходимо обновить объявления манифеста, а затем отправить контекст приложения. См. примеры кода ниже.

Объявления манифеста приложения Android

Приложение должно зарегистрировать приемник широковещательного трансляции для поставщика контекста меж устройств, чтобы участвовать в контракте. Регистрация должна находиться в манифесте следующим образом.

<?xml version="1.0" encoding="utf-8"?>   
<manifest xmlns:android="http://schemas.android.com/apk/res/android"   
    <!--   
        If the app targets API 30 or higher, be sure to use the <queries>   
        and add com.microsoft.appmanager to the included packages.   
    -->   
    <queries>   
        <package android:name="com.microsoft.appmanager" />   
    </queries>   
    <application …     
        <!-- … -->   
       <!--   
           This is the receiver declaration for receiving broadcasts from LTW.   
           It needs to be exported with meta-data as this is checked for    

           The package before we send the broadcast.   
       -->   
       <receiver   
           android:name="com.microsoft.crossdevicesdk.continuity.AppContextBroadcastReceiver"  
           android:enabled="true"   
           android:exported="true">   
           <intent-filter>   
               <action android:name="com.microsoft.crossdevice.appcontextrequest" />   
           </intent-filter>   
   
            <meta-data   
                android:name="com.microsoft.crossdevice.sampleProviderMetadataName"   
                android:value="true" />   
        </receiver>   
    </application>   
</manifest>

Примеры кода для отправки контекста приложения

После добавления объявлений манифеста партнерские приложения могут отправлять контекст приложения, как показано в примерах кода ниже.

В этом примере показано использование IAppContextEventHandler интерфейса с Java.

IAppContextEventHandler appContextEventHandler = new IAppContextEventHandler() {  
    @Override  
    public void onContextRequestReceived(ContextRequestInfo contextRequestInfo) {  
        Log.d(TAG, String.format("onContextRequestReceived, type:%s", contextRequestInfo.getType()));  
        //Not necessary to do following things in here, just  
        //make sure to send app context after receiving broadcast.  
        AppContext appContext = new AppContext();  
        //...  
        //set parameter  
        appContext.setType(ProtocolConstants.TYPE_APPLICATION_CONTEXT);  
        appContext.setCreateTime(System.currentTimeMillis());  
        appContext.setLastUpdatedTime(System.currentTimeMillis());  
        appContext.setTitle("New PowerPoint Presentation");  
        appContext.setExtras("{\"DocInfo\":\"[{\"timestamp\":1672,\"DocTitle\":\"Book Sharing\",\"Index\":\"8\"}]\"}");  
        //...  
        AppContextManager.INSTANCE.sendAppContext(getApplicationContext(),appContext);  
    }  
  
    @Override  
    public void onInvalidContextRequestReceived(@NonNull Throwable throwable) {  
        Log.e(TAG, String.format("onInvalidContextRequestReceived: " + throwable.getMessage()));  
    }  

    @Override   
    public void onSyncServiceDisconnected() {   
        Log.d(TAG, String.format("onSyncServiceDisconnected"));   
    }  
};  
AppContextManager.INSTANCE.setAppContextEventHandler(appContextEventHandler);

В этом примере показано использование выражения объекта для реализации IAppContextEventHandler интерфейса с Kotlin.

val appContextEventHandler = object : IAppContextEventHandler { 
    override fun onContextRequestReceived(contextRequestInfo: ContextRequestInfo) { 
        Log.d(TAG, String.format("onContextRequestReceived, type:%s", contextRequestInfo.type)); 
        //Not necessary to do following things in here, just 
        //make sure to send app context after receiving broadcast. 
        var appContext = AppContext() 
        //... 
        //set parameter 
        appContext.type = ProtocolConstants.TYPE_APPLICATION_CONTEXT 
        appContext.createTime = System.currentTimeMillis() 
        appContext.lastUpdatedTime = System.currentTimeMillis() 
        appContext.setTitle("New PowerPoint Presentation") 
        appContext.setExtras("{\"DocInfo\":\"[{\"timestamp\":1672,\"DocTitle\":\"Book Sharing\",\"Index\":\"8\"}]\"}") 
        //... 
        AppContextManager.sendAppContext(applicationContext,appContext) 
    } 
 
    override fun onInvalidContextRequestReceived(throwable: Throwable) { 
        Log.e(TAG, String.format("onInvalidContextRequestReceived: " + throwable.message)) 
    } 
 
    override fun onSyncServiceDisconnected() { 
        Log.d(TAG, String.format("onSyncServiceDisconnected")) 
    } 
} 
AppContextManager.setAppContextEventHandler(appContextEventHandler)

Описание протокола

Протокол — это простая трансляция, которая отправляется из "Связь с Windows" в каждый из пакетов, поддерживающих определенный тип функции контекста приложения, когда "Связь с Windows" готов к получению контекста приложения.

Поле намерения Ключ Значение
Действие Н/П com.microsoft.crossdevice.appcontextrequest Исправлена ссылка на Windows. Запрашиватель будет com.microsoft.appmanager
Дополнительные (пакет) version 2.0 (версия [дополнительный].[ major])
Дополнительные (пакет) contentProviderUri content://com.microsoft.taskcontinuity/b695d1d8 Уникально создано для каждого пакета.
Дополнительные (пакет) requestedContextType Если указано, укажите, какой тип контекста приложения запрашивается. Это двоичный флаг, в настоящее время у нас есть два типа... Контекст приложения: 0x01 и контекст журнала браузера: 0x02.

После получения трансляции пакет SDK будет отвечать за проверку и обработку информации. Ожидание от пакетов, получающих широковещательный канал, заключается в отправке контекста приложения для связи с Windows. Следующие значения должны предоставляться партнерскими приложениями при отправке контекста приложения:

Ключ Значение Дополнительные сведения
type [обязательно] Двоичный флаг, указывающий, какой тип контекста приложения отправляется в LTW. Значение должно быть согласовано с параметром requestedContextType.
createTime [обязательно] Метка времени создания контекста приложения.
lastUpdatedTime [обязательно] Метка времени последнего обновления контекста приложения. В любое время, когда обновляются все поля контекста приложения, необходимо записать обновленное время.
teamId [необязательно] Используется для идентификации организации или группы, к которой принадлежит приложение.
intentUri [необязательно] Используется для указания того, какое приложение может продолжить контекст приложения, переданный с исходного устройства.
appId [необязательно] Пакет приложения, для который используется контекст. Использовать это необходимо только поставщикам служб контекста. Ознакомьтесь с документами Java. Если опущено, будет использоваться пакет поставщика ответа вызовов.
title [необязательно] Заголовок этого контекста приложения, например имя документа или название веб-страницы.
weblink [необязательно] URL-адрес веб-страницы для загрузки в браузере для продолжения контекста приложения.
preview [необязательно] Байт изображения предварительного просмотра, который может представлять контекст приложения.
extras [необязательно] Объект пары "ключ-значение", содержащий сведения о состоянии конкретного приложения, необходимые для продолжения контекста приложения на продолжающемся устройстве. Необходимо указать, когда контекст приложения имеет уникальные данные.
LifeTime [необязательно] Время существования контекста приложения в миллисекундах. Используется только для текущего сценария, если не задано, значение по умолчанию равно -1.

Чтобы обеспечить совместимость с предыдущей функцией непрерывности браузера с помощью пакета SDK X-Device 1.0, мы добавили еще два дополнительных метода. При использовании этой функции необходимо указать следующие значения:

Поле намерения Ключ Значение
browserContextEmptyFlag [необязательно] Пометка, чтобы указать, является ли контекст браузера пустым. Это только для функции непрерывности браузера.
browserHistory [необязательно] Контекст журнала просмотра для приложения. Это только для функции непрерывности браузера. В настоящее время рекомендуется предоставлять до 3 URI. Если предоставляется больше, они будут игнорироваться.

Партнерские приложения могут вызывать addBrowserContext метод добавления журнала браузера. При добавлении журнала браузера необходимо указать следующие значения:

Ключ Значение
browserWebUri Веб-URI, который откроется в браузере на компьютере.
(http: или https:)
title Заголовок веб-страницы.
timestamp Метка времени, которую веб-страница была открыта или обновлена.
favIcon [необязательно] Favicon веб-страницы в байтах должен быть небольшим в целом.

Репозиторий Windows cross-Device на GitHub

Сведения об интеграции пакета SDK windows cross-Device в проект в репозитории Windows-Cross-Device на сайте GitHub.

Список часто задаваемых вопросов см. в Связь с телефоном часто задаваемых вопросов.