1、第一个正式页面欢迎页
import router from '@ohos.router'
import { hilog } from '@kit.PerformanceAnalysisKit'
import { permissionManager } from '../common/PermissionManager'
import { abilityAccessCtrl, bundleManager, common, Permissions, Want } from '@kit.AbilityKit';
import showToast from '../common/ToastUtils'
import { DeviceInfoUtils } from '../common/DeviceInfoUtils'
import window from '@ohos.window'
import bundle from '@ohos.bundle';
import { BusinessError, request } from '@kit.BasicServicesKit'
import { UserModel } from '../mvi/data/UserModel'
import PreferenceUtil from '../common/PreferenceUtil'
import { Constants } from '../common/Constants'
import { windowManager } from '../common/WindowUtils'
import { setLightColorMode } from '../common/ColorModeChangeFunctions'
import { geoLocationManager } from '@kit.LocationKit';
import { async } from 'rxjs';
import { LogUtils } from '../common/LogUtils';
import OHPermission, { PermissionGrantStatusResult } from '../common/OHPermission';
import { GeoLocationInfo } from '../common/OHLocation';
const TAG = "SplashPage"
@Entry
@Component
struct SplashPage {
@State isPermissionGrant: boolean = false
permissionList: Permissions[] = ['ohos.permission.MICROPHONE', 'ohos.permission.WRITE_IMAGEVIDEO'
, 'ohos.permission.READ_IMAGEVIDEO', 'ohos.permission.MEDIA_LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION',
'ohos.permission.LOCATION'];
permissions: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION'];
//@State versionName: Promise<string> = "";
@State versionName: string = "";
@State versionCode: number = 0;
@State message: string = ''
@State mUserModel: UserModel | undefined = undefined
@Provide navPathStack: NavPathStack = new NavPathStack();
@StorageProp('topHeight') topRectHeight: number = 0;
@StorageProp('bottomHeight') bottomRectHeight: number = 0;
@StorageProp('enableDarkMode') enableDarkMode: boolean = false;
private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
@State isShowPermissions: boolean = false;
isShowLocation: boolean = false;
@State locationServiceMessage: ResourceStr = '';
@State latitude: number = 0.0;
@State longitude: number = 0.0;
@State locale: string = '';
@State currentLocation: string = '';
@State permissionsMessage: ResourceStr = '';
async aboutToAppear() {
setLightColorMode(this.context);
this.versionName = await DeviceInfoUtils.getAppVersion()
this.versionCode = await DeviceInfoUtils.getVersionCode()
console.info('aboutToAppear' + this.versionName)
const checkPermissionsResult = permissionManager.checkPermissions(this.permissionList).valueOf()
if (checkPermissionsResult) {
setTimeout(() => {
router.pushUrl({ url: 'pages/HomePage' }).catch((err: Error) => {
});
}, 3000)
} else {
// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
this.getCurrentLocationWithPermission().then((data) => {
this.latitude = data.lat
this.longitude = data.lng
})
}
}
/**
* 获取当前位置
* @returns
*/
async getCurrentLocationWithPermission():Promise<GeoLocationInfo>{
// 校验是否被授予定位权限
return OHPermission.checkPermissionsArray(this.permissionList).then((data)=>{
if (!data.grantStatus) {
return OHPermission.requestPermissionsArray(data.permissionsDenied).then((r)=>{
if (r.grantStatus) {
return this.getCurrentLocation()
}else {
throw Error("获取权限失败")
}
})
}else {
return this.getCurrentLocation()
}
}).catch((error:Error)=>{
let geoLocationInfo = {"status":false,"msg":error.message} as GeoLocationInfo
return geoLocationInfo
})
}
/**
* 获取当前位置信息
* @returns
*/
async getCurrentLocation(): Promise<GeoLocationInfo> {
let request: geoLocationManager.SingleLocationRequest = {
'locatingPriority': geoLocationManager.LocatingPriority.PRIORITY_LOCATING_SPEED,
'locatingTimeoutMs': 10000
}
return geoLocationManager.getCurrentLocation(request)
.then((result) => { // 调用getCurrentLocation获取当前设备位置,通过promise接收上报的位置
LogUtils.debug(TAG, "getCurrentLocation======= location=" + JSON.stringify(result))
let location: geoLocationManager.Location = result
let geoLocationInfo = { "status": true, lng: location.longitude, lat: location.latitude } as GeoLocationInfo
return geoLocationInfo
})
.catch((error: BusinessError) => { // 接收上报的错误码
LogUtils.debug(TAG, "getCurrentLocation======= location=" + JSON.stringify(error))
let geoLocationInfo = { "status": false } as GeoLocationInfo
return geoLocationInfo
});
}
async onPageShow(): Promise<void> {
window.getLastWindow(AppStorage.get("context"), (err, data) => {
if (err.code) {
console.error('Failed to get last window. Cause:' + JSON.stringify(err));
return;
}
});
}
build() {
Navigation(this.navPathStack) {
Row() {
Column() {
// this.titleBar()
Column() {
Image($r('app.media.public_splash_title_logo'))
.width('100%')
.height(100)
.objectFit(ImageFit.Contain)
// 保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。
Text($r('app.string.public_company_aim'))
.fontSize(18)
.fontColor($r('app.color.public_color_FFFFFFFF'))
.fontWeight(FontWeight.Bold)
.blendMode(BlendMode.DST_IN, BlendApplyType.OFFSCREEN)
.linearGradient({
direction: GradientDirection.Right,
colors: [[0x00428E, 0.0], [0x0F84F8, 0.3], [0x59B4F9, 1.0]]
})
.blendMode(BlendMode.SRC_OVER, BlendApplyType.OFFSCREEN)
.padding(6)
}
.padding({
left: 0,
top: 0,
right: 0,
bottom: -20
}).size({ width: "50%", height: '90%' }).justifyContent(FlexAlign.Center)
Row() {
Text(`版本: ${this.versionName}`).fontSize(14)
}
.height('100%')
.width("100%") //设置宽度充满父组件
.size({ width: "100%", height: '10%' })
.justifyContent(FlexAlign.Center)
}
}.size({ width: "100%", height: "100%" })
.backgroundColor($r('app.media.app_login_bg'))
.backgroundImageSize(ImageSize.Cover)
}
.backgroundColor($r('app.color.public_color_FFFFFF'))
.hideTitleBar(true)
.hideNavBar(false)
}
}
效果如下:

195

被折叠的 条评论
为什么被折叠?



