Отображение запущенного приложения при подключении к Samsung DeX - PullRequest
0 голосов
/ 25 февраля 2019

Когда я подключаю свой телефон к док-станции DeX, окно моего приложения на панели задач DeX сворачивается.Это поведение по умолчанию.

Я использую Galaxy S8 под управлением DeX 2.5.

Я хочу, чтобы мое приложение отображало (в полноэкранном режиме или в окне) сразу после подключения к DeX .


То, что я пробовал до сих пор (согласно советам на сайте Samsung DeX ) ...

1 - Я применил манифестmeta-data, поддерживающий процесс приложения:

<meta-data
    android:name="com.samsung.android.keepalive.density"
    android:value="true"/>

2 - я применил свойство configChanges для перехвата изменений конфигурации:

android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|uiMode|keyboard|keyboardHidden|navigation"

Это работает, как ожидается, когда устройствоповорачивается, или когда размер экрана изменяется в интерфейсе DeX, т.е. работает Activity.onConfigurationChanged(Configuration).

Но это не срабатывает при подключении телефона к DeX.

3 - Мое действие настроено на изменение размера в манифесте:

android:resizeableActivity="true"
android:supportsPictureInPicture="true"

  • Есть ли способ заставить окно автоматически отображаться при подключении к Dex?
  • Есть ли способ получить обратный вызов при подключении к DeX, а затем запустить мое приложение с этого обратного вызова?

1 Ответ

0 голосов
/ 12 марта 2019

Эта информация действительна только для DeX v2.5.Обновления DeX v3 сломали приведенный ниже код.


Когда устройство подключено к DeX или отстыковано от него, система передает следующие намерения:

  • android.app.action.ENTER_KNOX_DESKTOP_MODE
  • android.app.action.EXIT_KNOX_DESKTOP_MODE

Любое приложение может зарегистрировать получателя в манифесте, чтобы получать уведомления при стыковке устройства:

<receiver android:name=".DexReceiver">
    <intent-filter>
        <action android:name="android.app.action.ENTER_KNOX_DESKTOP_MODE"/>
    </intent-filter>
</receiver>

Внутри ресивера приложение может перезапустить себя.

public void onReceive(Context context, Intent intent) {
    Intent relaunch = context.getPackageManager().getLaunchIntentForPackage(BuildConfig.APPLICATION_ID);
    relaunch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(relaunch);
}

Это заставляет приложение запускаться в обычном окне, когда оно закреплено.


Чтобы обеспечить полноэкранный запуск, есть2 изменения в манифесте.

1) Добавьте DeX meta-data внутри блока application:

<!--DeX FULL SCREEN LAUNCH SIZE-->
<meta-data
    android:name="com.samsung.android.dex.launchwidth"
    android:value="0"/>
<meta-data
    android:name="com.samsung.android.dex.launchheight"
    android:value="0"/>

Здесь значения 0 говорят DeX использовать максимальную ширину/ высота возможна.

2) Добавьте блок layout к запускаемому activity:

<!--USE BIG ENOUGH DIMENSIONS TO FORCE FULL-SCREEN ON LAUNCH-->
<layout
    android:defaultWidth="5000dp"
    android:defaultHeight="5000dp"
    android:gravity="center"/>

Здесь значения 5000dp должны быть больше, чем экран, которыйвы подключаетесь к DeX.

Оба блока начального размера рекомендуются Samsung в разных местах - мой опытБыло то, что второй вариант работал на S8 (DeX v2.5).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...