1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/geekharmony-hmosapp1

Клонировать/Скачать
README.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.06.2025 17:52 d53c9aa

Полезная библиотека инструментов 1

Введение

Предоставляет разработчикам инструменты для логирования, отображения уведомлений и проверок. Очень мощная библиотека.

003.gif

Установка

ohpm install @geekapp/libgeekapp

Дополнительная информация по настройке OpenHarmony ohpm, см. руководство по установке OpenHarmony ohpm

Инструкции по использованию

  1. Включение компонентов в соответствующих классах:
import libgeekapp from '@ohos/libgeekapp'
    "@hw-agconnect/cloud": "1.0.2",
    "@hw-agconnect/hmcore": "1.0.2",
    "long": "5.2.1",
    "@ohos/lottie": "^2.0.10",
    "@ohos/imageknife": "^2.1.2",
    "@ohos/banner": "^1.0.1-rc.5",
    "@ohos/httpclient": "^2.0.0",
    "@pura/harmony-utils": "^1.0.0",
    "@hzw/ohos-dsbridge": "^1.5.1",
    "@zyc/tablayout": "^1.0.10",
    "@gancao/hptdialog": "^1.0.2"
  1. Пример использования:
import { abilityAccessCtrl, AbilityConstant, bundleManager, Permissions, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import {
  CommonConstants,
  CommonSizeConstants,
  EmptyViewStateConfig,
  EmptyViewStateEnum,
  Logger,
  SizePreferencesUtil,
  WindowUtil
} from '@geekapp/libgeekapp';
import { ImageKnife, ImageKnifeGlobal } from '@ohos/imageknife';
// import { Bugly, BuglyBuilder } from 'bugly';
import { DeviceUtil } from '@pura/harmony-utils';

const TAG = '[EntryAbility]';
let localStorage: LocalStorage = new LocalStorage();

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    this.init_commponent(want, launchParam);
  }
``````typescript
  onDestroy(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }
``````markdown
  onWindowStageCreate(windowStage: window.WindowStage): void {
    // The main window is created, set the main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    this.init_onWindowStageCreate(windowStage);
    // windowStage.loadContent('pages/Index', (err) => {
    //   if (err.code) {
    //     hilog.error(0x0000, 'testTag', 'Failed to load content. Reason: %{public}s', JSON.stringify(err) ?? '');
    //     return;
    //   }
    //   hilog.info(0x0000, 'testTag', 'Content loaded successfully.');
    // });
  }
```  onWindowStageDestroy(): void {
    // The main window is destroyed, release UI resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }
```  onWindowStageRestore(windowStage: window.WindowStage): void {
    Logger.info(TAG, 'Ability onWindowStageRestore');
    this.init_onWindowStageRestore(windowStage);
  }

  onForeground(): void {
    // Ability moved to the foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
    AppStorage.setOrCreate('currentColorMode', this.context.config.colorMode);
  }

  onBackground(): void {
    // Ability moved to the background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }  // Инициализация компонента
  init_commponet(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // Инициализация webview
    try {
      import('@kit.ArkWeb').then(module => {
        module.webview.WebviewController.initializeWebEngine();
      });
    } catch (err) {
      Logger.error(TAG, 'dynamicLoading ArkWeb error:' + err);
    }
    // Установка стандартного размера шрифта
    SizePreferencesUtil.getInstance().createFontPreferences(this.context);
    SizePreferencesUtil.getInstance().saveDefaultFontSize(CommonSizeConstants.SET_SIZE_SMALL);
    //
    WindowUtil.setMissionContinueActive(this.context, false);
    // glide
    // Инициализация глобального ImageKnife
    ImageKnife.with(this.context);
    let imageKnife: ImageKnife | undefined = ImageKnifeGlobal.getInstance().getImageKnife();
    if (imageKnife != undefined) {
      // Установка размера кэша
      imageKnife.setLruCacheSize(100, 100 * 1204 * 1024);
    }
    // emptyview
    // Глобальная конфигурация для пустых страниц
    let globalStateConfig = new EmptyViewStateConfig();
    globalStateConfig.progressColor = Color.Red;
    globalStateConfig.emptyStr = 'Это глобальное сообщение для пустой страницы';
    globalStateConfig.emptyIcon = $r('app.media.state_empty');
    globalStateConfig.retryStr = 'Это глобальное сообщение для кнопки повторной попытки';
    globalStateConfig.defaultState = EmptyViewStateEnum.LOADING;
    globalStateConfig.showLoadingWhenRetry = false;
    EmptyViewStateConfig.globalStateConfig = globalStateConfig;
    // Нет данных для this.restoringData(want, launchParam)
    // Инициализация Bugly
    this.initBugly(this.context);
  }  async initBugly(context: Context): Promise<void> {
    // let builder = new BuglyBuilder();
    //
    // builder.appId = '27c77de263';   // Обязательное поле, идентификатор приложения из информации о продукте Bugly
    // builder.appKey = 'fd96bb31-4fcd-4e0f-9ae3-8950fdc46cdf';    // Обязательное поле, ключ приложения из информации о продукте Bugly
    // let id = await DeviceUtil.getDeviceId();
    // builder.deviceId = id;     // Обязательное поле, идентификатор устройства, должен быть уникальным для каждого устройства
    //
    // builder.appVersion = '1.1.0';   // Необязательное поле, версия приложения
    // builder.buildNum = '110';         // Необязательное поле, номер сборки приложения
    // builder.appChannel = 'website'; // Необязательное поле, канал приложения
    // builder.userId = "12345";       // Необязательное поле, идентификатор пользователя, если не указан, будет пустым
    // let deviceType = DeviceUtil.getDeviceType();
    // // builder.deviceModel = "huawei"; // Необязательное поле, модель устройства, если не указано, будет пустым
    // builder.deviceModel = deviceType.toString(); // Необязательное поле, модель устройства, если не указано, будет пустым
    // builder.debugMode = true;       // Необязательное поле, по умолчанию включено, если включено, SDK Bugly будет выводить больше логов отладки, в версии для продакшена можно отключить
    // builder.initDelay = 0;          // Необязательное поле, задержка инициализации в миллисекундах
    //
    // let initResult = Bugly.init(context, builder);
    // Bugly.testCrash(Bugly.JS_CRASH); // Моделирование ошибки JavaScript
    // Bugly.testCrash(Bugly.CPP_CRASH); // Моделирование ошибки native
  }  init_onWindowStageCreate(windowStage: window.WindowStage): void {
    AppStorage.setOrCreate('context', this.context);
    AppStorage.setOrCreate('currentColorMode', this.context.config.colorMode);
    AppStorage.setOrCreate('windowStage', windowStage);
    AppStorage.setOrCreate<number>('statusBarHeight', CommonConstants.DEFAULT_STATUS_HEIGHT);
    WindowUtil.requestFullScreen(windowStage, this.context);
    windowStage.loadContent('pages/Index1', localStorage);
  }

  init_onWindowStageRestore(windowStage: window.WindowStage): void {
    AppStorage.setOrCreate<number>('statusBarHeight', CommonConstants.DEFAULT_STATUS_HEIGHT);
    WindowUtil.requestFullScreen(windowStage, this.context);
  }```typescript
  init_onForeground(): void {
     AppStorage.setOrCreate('currentColorMode', this.context.config.colorMode);
   }

  на_Продолжение(хотParam: Record<string, Object>): AbilityConstant.OnContinueResult {
     хотParam["mainTabIndex"] = localStorage.get('mainTabIndex') as number;
     хотParam["mineTabIndex"] = localStorage.get('mineTabIndex') as number;
     // хотParam["userId"] = AppStorage.get<string>('userId') as string;
     // хотParam["articleItem"] = GlobalContext.getContext().getObject('articleItem') as string;
     // хотParam["stackName"] = GlobalContext.getContext().getObject('stackName') as string;
     // хотParam["userData"] = GlobalContext.getContext().getObject('userData') as string;
     // хотParam["learningItem"] = GlobalContext.getContext().getObject('learningItem') as string;
     // хотParam["introductionItem"] = GlobalContext.getContext().getObject('introductionItem') as string;
     хотParam["isLogged"] = AppStorage.get<boolean>('isLogged') as boolean;
     Logger.info(TAG, 'на_Продолжение хотParam:' + JSON.stringify(хотParam));
     return AbilityConstant.OnContinueResult.AGREE;
   }
```markdown
   async восстановить_данные(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
     Logger.info(TAG, 'Ability восстановить_данные1');
     this.проверить_разрешения();
     // Восстановление перенесенных данных из want.
     if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
       Logger.info(TAG, 'Ability восстановить_данные');
       if (want.parameters !== undefined) {
         Logger.info(TAG, 'восстановить_данные параметры:' + JSON.stringify(want.parameters));
         localStorage.setOrCreate('mainTabIndex', want.parameters.mainTabIndex);
         localStorage.setOrCreate('mineTabIndex', want.parameters.mineTabIndex);
         // GlobalContext.getContext().setObject('articleItem', want.parameters.articleItem);
         // GlobalContext.getContext().setObject('stackName', want.parameters.stackName);
         // GlobalContext.getContext().setObject('userData', want.parameters.userData);
         // GlobalContext.getContext().setObject('learningItem', want.parameters.learningItem);
         // GlobalContext.getContext().setObject('introductionItem', want.parameters.introductionItem);
       }
     }
   }
```setObject('introductionItem', want.parameters.introductionItem);
         // GlobalContext.getContext().setObject('isContinue', true);
         // AppStorage.setOrCreate('userId', want.parameters.userId);
         AppStorage.setOrCreate('isLogged', want.parameters.isLogged);
       }
       this.context.восстановитьОкноЭтап(localStorage);
     }
   }```typescript
  async проверитьРазрешения(): Promise<void> {
    const permissions: Array<Permissions> = ["ohos.permission.DISTRIBUTED_DATASYNC"];
    const accessManager = abilityAccessCtrl.createAtManager();
    try {
      const bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
      const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleFlags);
      const grantStatus = await accessManager.checkAccessToken(bundleInfo.appInfo.accessTokenId, permissions[0]);

      if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
        accessManager.requestPermissionsFromUser(this.context, permissions);
      }
    } catch (err) {
      Logger.error('EntryAbility', 'проверитьРазрешения', `Catch err: ${err}`);
      return;
    }
  }
}
import {
  CommonSizeConstants,
  Logger,
  NavDestinationPage,
  RouterManage,
  RouterMap,
  SizePreferencesUtil
} from '@geekapp/libgeekapp';
// import Theme, { ThemeStorage } from '@goweii/theme';
@Entry
@Component
struct Index1 {
  private pageInfos: NavPathStack = new NavPathStack();
  // @StorageLink('theme') theme: Theme = ThemeStorage.theme;

  onPageShow() {

  }

  aboutToAppear(): void {
    //
    this.pageInfos = RouterManage.instance.navPathStack;
    RouterManage.instance.replace({
      url: RouterMap.PageSplashNav,
      // url: RouterMap.PageNav,
      param: new Object({ query1: 1, query2: 2 })
    });
    //
    // let param = this.routerController.getNavMapInfo(RouterMap.ResultPage)?.param as Object;
    // let params = JSONObject.parse(JSONObject.toJSONString(param));
    // // 识别码图返回结果
    // this.result = params.get('result') as Array<scanBarcode.ScanResult>;
    // this.uri = params.get('uri') as string;
    // this.infoW = params.get('infoW') as number;
  }

  @Builder
  PageMap(name: string) {
    NavDestinationPage({
      url: name,
      routerController: RouterManage._instance,
    });
  }

  build() {
    Navigation(this.pageInfos)
      .navDestination(this.PageMap)
      .hideNavBar(true)
      .hideTitleBar(true)
      .hideBackButton(true)
      .hideToolBar(true);
  }
}

Ограничения и требования

Проверено на следующих версиях:

  • DevEco Studio: NEXT Developer Preview2(4.1.3.700), SDK: API11(4.1.0(11))

/libgeekapp # Корневая директория проекта ├── entry # Директория с примерами кода ├── components # Компоненты │ └─ Logger │ └─ TextUtil
├── README.md # Инструкции по установке и использованию


[//]: # ("pages/Index",)

[//]: # ("fontsize/pages/SetFontSizePage1",)

[//]: # ("webview/components/webview2/WebViewIndex2",)

[//]: # ("webview/components/webview3/WebViewIndex3",)

[//]: # ("webview/components/webview3/RouteToH5",)

[//]: # ("webview/components/webview3/Second",)

[//]: # ("webview/components/webview3/New",)

[//]: # ("scancode/pages/ScanBarcode",)

[//]: # ("scancode/pages/CustomScan",)

[//]: # ("scancode/pages/CreateBarcode",)

[//]: # ("scancode/pages/DetectBarcode",)

[//]: # ("scancode/pages/ResultPage",)

[//]: # ("scancode/pages/CustomResultPage")


## Вклад в проект

Если вы обнаружили любые проблемы во время использования, пожалуйста, сообщите нам об этом, создав [Issue](https://gitee.com/geekharmony/hmosapp1/issues). Мы также очень рады, если вы отправите [PR](https://gitee.com/geekharmony/hmosapp1/pulls).

## Освободительные лицензии

Проект основан на [Apache License](https://gitee.com/geekharmony/hmosapp1/blob/master/libgeekapp/LICENSE), пожалуйста, наслаждайтесь и участвуйте в открытом исходном коде свободно.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/geekharmony-hmosapp1.git
git@api.gitlife.ru:oschina-mirror/geekharmony-hmosapp1.git
oschina-mirror
geekharmony-hmosapp1
geekharmony-hmosapp1
master