Android 判断是否是折叠屏设备

794 阅读1分钟

在 Android 中,判断设备是否是折叠屏设备可以使用 WindowManager 和 DisplayFeature API。Android 10(API 级别 29)引入了对折叠屏设备的支持,您可以通过这些 API 检测设备的显示特性。

以下是一个示例代码,展示如何判断设备是否是折叠屏设备:

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Display;

import android.view.DisplayCutout;

import android.view.WindowInsets;

import android.view.WindowManager;

public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        if (isFoldableDevice()) {

            Log.d("DeviceType""This is a foldable device.");

        } else {

            Log.d("DeviceType""This is not a foldable device.");

        }

    }

    private boolean isFoldableDevice() {

        WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        if (windowManager != null) {

            Display display = windowManager.getDefaultDisplay();

            WindowInsets windowInsets = getWindow().getDecorView().getRootWindowInsets();

            if (windowInsets != null) {

                DisplayCutout displayCutout = windowInsets.getDisplayCutout();

                if (displayCutout != null) {

                    // Check for hinge or fold features

                    for (DisplayCutout.DisplayFeature feature : displayCutout.getBoundingRects()) {

                        if (feature.getType() == DisplayCutout.DisplayFeature.TYPE_HINGE ||

                            feature.getType() == DisplayCutout.DisplayFeature.TYPE_FOLD) {

                            return true;

                        }

                    }

                }

            }

        }

        return false;

    }

}

解释

  1. 获取 WindowManager 和 Display
    WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    Display display = windowManager.getDefaultDisplay();
  1. 获取 WindowInsets 和 DisplayCutout
    WindowInsets windowInsets = getWindow().getDecorView().getRootWindowInsets();

    DisplayCutout displayCutout = windowInsets.getDisplayCutout();
  1. 检查 DisplayFeature 类型
    for (DisplayCutout.DisplayFeature feature : displayCutout.getBoundingRects()) {

        if (feature.getType() == DisplayCutout.DisplayFeature.TYPE_HINGE ||

            feature.getType() == DisplayCutout.DisplayFeature.TYPE_FOLD) {

            return true;

        }

    }

注意事项

  • API 级别:确保您的应用目标 API 级别为 29 或更高,因为折叠屏支持是在 Android 10 中引入的。
  • 设备兼容性:不同设备制造商可能有不同的实现方式,建议在多种设备上进行测试。

通过上述方法,您可以在 Android 应用中判断设备是否是折叠屏设备,并根据需要调整应用的布局和行为。