Предоставляет разработчикам инструменты для логирования, отображения уведомлений и проверок. Очень мощная библиотека.
ohpm install @geekapp/libgeekapp
Дополнительная информация по настройке OpenHarmony ohpm, см. руководство по установке OpenHarmony ohpm
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"
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);
}
}
Проверено на следующих версиях:
/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 )