如何实现折叠屏折叠态不适配旋转，展示态适配旋转
=======================

1.  在module.json5添加属性"orientation": "unspecified"。
    
    _// module.json5_
    {
      "module": {
        "abilities": \[
          {
            "name": "EntryAbility",
            "orientation":"unspecified"  _// Unspecified orientation mode, determined by the system_
          }
        \]
      }
    }
    
2.  在EntryAbility.ets的onWindowStageCreate方法中设置监听。如果设备处于完全展开状态，设置跟随系统方向，包括竖屏、横屏、反向竖屏和反向横屏。如果设备处于完全折叠状态，设置固定竖屏。
    
    import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { display, window } from '@kit.ArkUI';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    export default class EntryAbility extends UIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
      }
    
      onDestroy(): void {
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
      }
    
      onWindowStageCreate(windowStage: window.WindowStage): void {
       _ // Main window is created, set main page for this ability_
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    
    
        windowStage.loadContent('pages/Index', (err) => {
          if (err.code) {
            hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
            return;
          }
          hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
        });
    
        windowStage.getMainWindow().then((windowObj) => {
         _ // Set orientation based on fold status: auto-rotation when expanded, portrait when folded_
          let orientation = display.getFoldStatus() === display.FoldStatus.FOLD\_STATUS\_EXPANDED ?
            window.Orientation.AUTO\_ROTATION : window.Orientation.PORTRAIT;
          windowObj?.setPreferredOrientation(orientation);
    
        _  // Monitor the unfolded or folded state of the foldable screen_
          display.on('foldStatusChange', (foldStatus: display.FoldStatus) => {
            orientation = foldStatus === display.FoldStatus.FOLD\_STATUS\_EXPANDED ? window.Orientation.AUTO\_ROTATION :
              window.Orientation.PORTRAIT;
            try {
              windowObj?.setPreferredOrientation(orientation, (err: BusinessError) => {
                if (err.code) {
                  console.error(\`Failed to set window orientation. Cause code: ${err.code}, message: ${err.message}\`);
                  return;
                }
                console.info('Succeeded in setting window orientation.');
              });
            } catch (exception) {
              console.error(\`Failed to set window orientation. Cause code: ${exception.code}, message: ${exception.message}\`);
            }
          })
        });
      }
    
      onWindowStageDestroy(): void {
      _  // Main window is destroyed, release UI related resources_
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
      }
    
      onForeground(): void {
      _  // Ability has brought to foreground_
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
      }
    
      onBackground(): void {
       _ // Ability has back to background_
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
      }
    }