日常开发事项-第一个页面SplashPage

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)
  }

}

效果如下:

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值