三星设备全屏模式问题:应用未显示在三星全屏设置列表
三星设备上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
相关产品推荐
相关产品推荐

