插入Samsung DeX时显示正在运行的应用程序

问题描述 投票:0回答:1

当我将手机插入DeX底座时,我的应用程序窗口在DeX任务栏中被最小化。这是默认行为。

我正在使用运行DeX 2.5的Galaxy S8。

我希望我的应用程序在插入DeX时立即显示(全屏或窗口)。


到目前为止我尝试过的(根据advice on the Samsung DeX website)...

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时获得回调,然后从该calllback启动我的应用程序?
android samsung-dex
1个回答
0
投票

当设备与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)在meta-data区块内添加DeX 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的屏幕。

三星在不同的地方推荐两种发射尺寸模块 - 我的经验是第二种选择适用于S8(DeX v2.5)。

© www.soinside.com 2019 - 2024. All rights reserved.