Эта информация действительна только для 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).