HarmonyOS 应用开发之API切换&Context接口切换

发布于:2024-04-06 ⋅ 阅读:(185) ⋅ 点赞:(0)

概述

FA模型和Stage模型由于线程模型和进程模型的差异,部分接口仅在FA模型下才能使用,针对这部分接口在SDK的接口中有FAModelOnly的标记,用于提醒开发者这部分接口仅能在FA模型下使用。因此在切换到Stage模型时,需要将应用中用到的FAModelOnly接口替换成Stage模型下对应的接口。下面是startAbility的接口切换示例,全量接口列表请查看后续章节:

startAbility接口由FA模型切换到Stage模型的示例:

  • FA模型示例
import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
import Logger from '../../utils/Logger';

const TAG: string = 'PagePageAbilityFirst';

@Entry
@Component
struct Index {
  
  build() {
    // ...
    Button() {
      // ...
    }
    .onClick(async () => {
      try {
        Logger.info(TAG, 'Begin to start ability');
        let want: Want = {
          bundleName: 'com.samples.famodelabilitydevelop',
          moduleName: 'entry',
          abilityName: 'com.samples.famodelabilitydevelop.PageAbilitySingleton'
        };
        await featureAbility.startAbility({ want: want });
        Logger.info(TAG, `Start ability succeed`);
      }
      catch (error) {
        Logger.error(TAG, 'Start ability failed with ' + error);
      }
    })
  }
}
  • Stage示例示例
import Want from '@ohos.app.ability.Want';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';

@Entry
@Component
struct Index {
  private context = getContext(this) as common.UIAbilityContext;

  build() {
    // ...
    Button() {
      // ...
    }
    .onClick(() => {
      // context为Ability对象的成员,在非Ability对象内部调用需要
      // 将Context对象传递过去
      let wantInfo: Want = {
        bundleName: "com.example.myapplication",
        abilityName: "EntryAbility"
      };
      this.context.startAbility(wantInfo).then(() => {
        console.info('startAbility success.');
      }).catch((error: BusinessError) => {
        console.error('startAbility failed.');
      })
    })
  }
}

Context接口切换

Context接口切换

FA接口 Stage模型接口对应d.ts文件 Stage对应接口或字段
getOrCreateLocalDir(callback:AsyncCallback<string>):void;
getOrCreateLocalDir():Promise<string>;
Stage模型无对应接口 Stage模型应用在应用根目录下没有操作权限,不提供对应接口
verifyPermission(permission:string,options:PermissionOptions,callback:AsyncCallback<number>):void;
verifyPermission(permission:string,callback:AsyncCallback<number>):void;
verifyPermission(permission:string,options?:PermissionOptions):Promise<number>;
@ohos.abilityAccessCtrl.d.ts verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus;: Promise<GrantStatus>;
requestPermissionsFromUser(permissions:Array<string>,requestCode:number,resultCallback:AsyncCallback<PermissionRequestResult>):void;
requestPermissionsFromUser(permissions:Array<string>,requestCode:number):Promise<PermissionRequestResult>;
@ohos.abilityAccessCtrl.d.ts requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>, requestCallback: AsyncCallback<PermissionRequestResult>) : void;
requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>) : Promise<PermissionRequestResult>;
getApplicationInfo(callback:AsyncCallback<ApplicationInfo>):void;
getApplicationInfo():Promise<ApplicationInfo>;
application\Context.d.ts applicationInfo: ApplicationInfo;
getBundleName(callback : AsyncCallback<string>): void;
[getBundleName(): Promise<string>;
application\UIAbilityContext.d.ts abilityInfo.bundleName: string;
getDisplayOrientation(callback : AsyncCallback<bundle.DisplayOrientation>): void;
[getDisplayOrientation(): Promise<bundle.DisplayOrientation>;
@ohos.screen.d.ts readonly orientation: Orientation;
setDisplayOrientation(orientation:bundle.DisplayOrientation, callback:AsyncCallback<void>):void;
setDisplayOrientation(orientation:bundle.DisplayOrientation):Promise<void>;
@ohos.screen.d.ts setOrientation(orientation: Orientation, callback: AsyncCallback<void>): void;
setOrientation(orientation: Orientation): Promise<void>;
setShowOnLockScreen(show:boolean, callback:AsyncCallback<void>):void;
setShowOnLockScreen(show:boolean):Promise<void>;
@ohos.window.d.ts setShowOnLockScreen(showOnLockScreen: boolean): void;
setWakeUpScreen(wakeUp:boolean, callback:AsyncCallback<void>):void;
setWakeUpScreen(wakeUp:boolean):Promise<void>;
@ohos.window.d.ts setWakeUpScreen(wakeUp: boolean): void;
getProcessInfo(callback:AsyncCallback<ProcessInfo>):void;
getProcessInfo():Promise<ProcessInfo>;
@ohos.app.ability.abilityManager.d.ts getAbilityRunningInfos(callback: AsyncCallback<Array<AbilityRunningInfo>>): void;
getAbilityRunningInfos(): Promise<Array<AbilityRunningInfo>>;
getElementName(callback:AsyncCallback<ElementName>):void;
getElementName():Promise<ElementName>;
application\UIAbilityContext.d.ts abilityInfo.name: string;
abilityInfo.bundleName: string;
getProcessName(callback:AsyncCallback<string>):void;
getProcessName():Promise<string>;
@ohos.app.ability.abilityManager.d.ts getAbilityRunningInfos(callback: AsyncCallback<Array<AbilityRunningInfo>>): void;
getAbilityRunningInfos(): Promise<Array<AbilityRunningInfo>>;
getCallingBundle(callback:AsyncCallback<string>):void;
getCallingBundle():Promise<string>;
Stage模型无对应接口 Stage模型应用可以使用Want.parameters的ohos.aafwk.param.callerUid参数,获取调用方的应用信息
getFilesDir(callback:AsyncCallback<string>):void;
getFilesDir():Promise<string>;
application\Context.d.ts filesDir: string;
getCacheDir(callback:AsyncCallback<string>):void;
getCacheDir():Promise<string>;
application\Context.d.ts cacheDir: string;
getOrCreateDistributedDir(callback:AsyncCallback<string>):void;
getOrCreateDistributedDir():Promise<string>;
application\Context.d.ts distributedFilesDir: string;
getAppType(callback:AsyncCallback<string>):void;
getAppType():Promise<string>;
application\UIAbilityContext.d.ts 通过abilityInfo字段的type属性获取
abilityInfo.type: bundleManager.AbilityType;
getHapModuleInfo(callback:AsyncCallback<HapModuleInfo>):void;
getHapModuleInfo():Promise<HapModuleInfo>;
application\UIAbilityContext.d.ts currentHapModuleInfo: HapModuleInfo;
getAppVersionInfo(callback:AsyncCallback<AppVersionInfo>):void;
getAppVersionInfo():Promise<AppVersionInfo>;
bundle\bundleInfo.d.ts readonly name: string;
readonly versionCode: number;
readonly versionName: string;
getApplicationContext():Context; application\Context.d.ts getApplicationContext(): ApplicationContext;
getAbilityInfo(callback:AsyncCallback<AbilityInfo>):void;
getAbilityInfo():Promise<AbilityInfo>;
application\UIAbilityContext.d.ts abilityInfo: AbilityInfo;
isUpdatingConfigurations(callback:AsyncCallback<boolean>):void;
isUpdatingConfigurations():Promise<boolean>;
Stage模型无对应接口 在系统环境变化时,应用不会重启,调用onConfigurationUpdated接口通知应用,该接口在FA模型是空实现接口,Stage模型不提供对应接口
printDrawnCompleted(callback:AsyncCallback<void>):void;
printDrawnCompleted():Promise<void>;
Stage模型无对应接口 该接口在FA模型是空实现接口,不影响应用功能,Stage模型不提供对应接口

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向