You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

三星设备全屏模式问题:应用未显示在三星全屏设置列表

三星设备上MAUI应用无法进入全屏且未出现在系统全屏设置列表中

我用C# MAUI开发了一款Android应用,在其他品牌设备上都能正常进入全屏模式,但在三星设备上无法实现。我注意到三星系统的菜单里有专门的全屏设置选项,但我的应用并没有出现在这个列表里。有没有开发者遇到过类似问题?怎么才能让应用显示在这个选项中?

当前我的MainActivity代码如下:

public class MainActivity : MauiAppCompatActivity
{   
    protected override void OnCreate(Bundle savedInstanceState)
    {           
        base.OnCreate(savedInstanceState);            
        CheckDeepLink();
    }
    public override global::Android.Views.View OnCreateView(global::Android.Views.View parent, string name, Context context, IAttributeSet attrs)
    {
        if (parent is null)
            return parent;
        var resources = context.Resources.GetIdentifier("config_navBarInteractionMode", "integer", "android");
        var fabricante = DeviceInfo.Manufacturer;
        Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);
        Window.InsetsController.Show(WindowInsets.Type.StatusBars());
        Window.InsetsController.Show(WindowInsets.Type.NavigationBars());
        WindowCompat.SetDecorFitsSystemWindows(Window, false);
        return base.OnCreateView(parent, name, context, attrs);
    }

    private void CheckDeepLink()
    {
        Intent intent = Intent;
        var action = intent.Action;
        var stringLink = intent.DataString;
        if (Intent.ActionView == action && !string.IsNullOrWhiteSpace(stringLink))
        {
            try
            {                   
                var linkUri = new Uri(stringLink);                    
                App.Current.SendOnAppLinkRequestReceived(linkUri);
            }
            catch
            {

            }
        }
    }
}

解决方案

1. 配置AndroidManifest.xml声明全屏支持

三星的系统全屏设置列表要求应用明确声明相关特性,在Platforms/Android/AndroidManifest.xml的<activity>标签内添加以下属性:

android:resizeableActivity="true"
android:supportsPictureInPicture="true"
android:windowSoftInputMode="adjustResize"

同时确保应用主题兼容全屏,可使用官方全屏主题或自定义主题:

<!-- 自定义主题示例 -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

2. 调整MainActivity的全屏逻辑位置

当前全屏设置代码放在OnCreateView中时机不对,应移至OnCreate方法,同时适配Android版本和三星特性:

public class MainActivity : MauiAppCompatActivity
{   
    protected override void OnCreate(Bundle savedInstanceState)
    {           
        base.OnCreate(savedInstanceState);            
        ConfigureFullscreen();
        CheckDeepLink();
    }

    private void ConfigureFullscreen()
    {
        // 设置全屏和布局无限制标志
        Window.SetFlags(WindowManagerFlags.Fullscreen | WindowManagerFlags.LayoutNoLimits, 
                        WindowManagerFlags.Fullscreen | WindowManagerFlags.LayoutNoLimits);
        
        // 适配Android 11+的InsetsController
        if (Build.VERSION.SdkInt >= BuildVersionCodes.R)
        {
            Window.InsetsController.Hide(WindowInsets.Type.StatusBars() | WindowInsets.Type.NavigationBars());
            // 设置滑动显示状态栏/导航栏的行为
            Window.InsetsController.SetSystemBarsBehavior(WindowInsetsController.BehaviorShowTransientBarsBySwipe);
        }
        else
        {
            // 兼容Android 10及以下版本
            Window.DecorView.SystemUiVisibility = (StatusBarVisibility)(SystemUiFlags.Fullscreen | SystemUiFlags.HideNavigation | SystemUiFlags.ImmersiveSticky);
        }
        
        WindowCompat.SetDecorFitsSystemWindows(Window, false);
    }

    // 其余方法保持不变
    public override global::Android.Views.View OnCreateView(global::Android.Views.View parent, string name, Context context, IAttributeSet attrs)
    {
        if (parent is null)
            return parent;
        var resources = context.Resources.GetIdentifier("config_navBarInteractionMode", "integer", "android");
        var fabricante = DeviceInfo.Manufacturer;
        return base.OnCreateView(parent, name, context, attrs);
    }

    private void CheckDeepLink()
    {
        Intent intent = Intent;
        var action = intent.Action;
        var stringLink = intent.DataString;
        if (Intent.ActionView == action && !string.IsNullOrWhiteSpace(stringLink))
        {
            try
            {                   
                var linkUri = new Uri(stringLink);                    
                App.Current.SendOnAppLinkRequestReceived(linkUri);
            }
            catch
            {

            }
        }
    }
}

3. 三星专属适配(可选)

如果上述方法无效,可尝试调用三星专属API注册应用到全屏列表:
首先在AndroidManifest.xml添加权限:

<uses-permission android:name="com.samsung.android.permission.SAMSUNG_FULLSCREEN" />

然后在ConfigureFullscreen方法中添加厂商判断和专属逻辑:

if (DeviceInfo.Manufacturer.Equals("Samsung", StringComparison.OrdinalIgnoreCase))
{
    try
    {
        var windowManager = GetSystemService(Context.WindowService) as Android.Views.IWindowManager;
        var method = windowManager.Class.GetMethod("setForceFullscreen", Java.Lang.Boolean.Type);
        method.Invoke(windowManager, true);
    }
    catch (Exception)
    {
        // 忽略异常,避免因三星API变更导致崩溃
    }
}

4. 确认目标SDK版本

确保应用目标SDK版本设置为30及以上,三星的新特性对高版本SDK支持更完善,可在项目属性或AndroidManifest.xml中调整。


内容的提问来源于stack exchange,提问作者Carlos Henrique Carniatto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:35:59