8.7 版本发布—WinterCG 兼容性第一部分
了解更多

Application 类提供了围绕 Android 的 android.app.Application 和 iOS 的 UIApplication 的包装器。使用此类,您可以处理应用程序的生命周期事件,在 Android 上发送广播或在 IOS 上添加通知观察者等。

使用 Application 类

注册广播接收器

要注册广播接收器,请按照以下 3 个步骤操作

  1. @nativescript/core 导入 Application 类。

    ts
    import { Application, isAndroid } from '@nativescript/core'
  2. 获取 android.app.Application 实例的包装器对象。使用 android 属性获取围绕 android.app.Application 的包装器。

    ts
    const androidApp: AndroidApplication = Application.android
  3. 调用 registerBroadcastReceiver 方法。在 androidApp 上调用 registerBroadcastReceiver 方法。

    ts
    androidApp.registerBroadcastReceiver()

有关显示如何使用自定义意图过滤器注册广播接收器的完整示例,请访问以下链接

对于系统意图过滤器,请参阅 标准广播操作

取消注册广播接收器

要取消注册广播接收器,请在围绕 android.app.Application 的包装器上调用 unregisterBroadcastReceiver,并将其传递给要取消注册广播接收器的意图过滤器。以下示例取消注册了用于 android.content.Intent.ACTION_BATTERY_CHANGED 意图过滤器的广播接收器。

ts
import { Application, isAndroid } from '@nativescript/core'
if (isAndroid) {
  const androidApp: AndroidApplication = Application.android

  androidApp.unregisterBroadcastReceiver(
    android.content.Intent.ACTION_BATTERY_CHANGED
  )
}

添加通知观察者

要添加 iOS 通知观察者,请按照以下步骤操作

  1. @nativescript/core 导入 Application 类。

    ts
    import { Application, isIOS } from '@nativescript/core'
  2. 获取 UIApplication 实例的包装器对象。

    ts
    const iOSApp: iOSApplication = Application.ios
  3. 调用 addNotificationObserver 方法。调用 addNotificationObserver,将其传递给要观察的通知的名称(NSNotificationName) 作为第一个参数,并将回调函数作为第二个参数,该回调函数将在该通知发生时被调用。

    ts
    const observer: any = iOSApp.addNotificationObserver(
      UIDeviceOrientationDidChangeNotification,
      (notification: NSNotification) => {
        //Handle the notification
      }
    )

在此处查找完整示例 此处

移除通知观察者

要移除通知观察者,请在 Application.ios 参考上使用 removeNotificationObserver 方法,将 addNotificationObserver 返回的观察者 ID 作为第一个参数,并将要停止观察的通知的名称作为第二个参数。

ts
iOSApp.removeNotificationObserver(
  observer,
  UIDeviceBatteryStateDidChangeNotification
)

跨平台应用程序事件

此类允许您在两个平台上侦听以下生命周期事件。

ts
Application.on('orientationChanged', (args: ApplicationEventData) => {
  // handle the event
})
更多事件
  • livesync
  • cssChanged
  • initRootView
  • launch
  • displayed
  • suspend
  • resume
  • exit
  • lowMemory
  • uncaughtError
  • discardedError
  • orientationChanged
  • systemAppearanceChanged
  • fontScaleChanged

getResources()

ts
resources: any = Application.getResources()

获取应用程序级别的静态资源。


setResources()

ts
Application.setResources(resources)

设置应用程序级别的静态资源。


setCssFileName()

ts
Application.setCssFileName(filePath)

设置应用程序的 css 文件名。


getCssFileName()

ts
cssFileName: string = Application.getCssFileName()

获取应用程序的 css 文件名。


loadAppCss()

ts
loadedCss: any = Applicatioin.loadAppCss()

立即加载 app.css。默认情况下,app.css 文件在“加载”后不久加载。对于 Android 快照,CSS 可以在快照生成期间进行解析,因为 CSS 不依赖于运行时 API,并且将显式调用 loadAppCss。


addCss()

ts
Application.addCss(cssText, attributeScoped)

将新值添加到应用程序样式。

  • cssText - 要添加到当前应用程序样式的有效 CSS 样式。
  • 可选attributeScoped - 设置样式是否为属性范围样式。添加属性范围样式不会执行完整的应用程序样式刷新。

Android 参考

android

ts
androidApp: AndroidApplication = Application.android

此属性为您提供 AndroidApplication 对象,它是围绕原生 android 应用程序实例的 Nativescript 包装器。


nativeApp

ts
nativeApp: android.app.Application = androidApp.nativeApp
// or
nativeApp: UIApplication = iOSApp.nativeApp

这是一个原生应用程序引用。

对于 Android,它是 android.app.Application 实例,跟踪全局应用程序状态。从此对象中,您可以获取诸如 getFilesDir()、onLowMemory() 等方法。

对于 iOS,它返回应用程序的 UIApplication 实例的引用。


foregroundActivity

ts
foregroundActivity = androidApp.foregroundActivity

获取当前可见(最顶层)的 android Activity


startActivity

ts
startActivity = androidApp.startActivity

获取应用程序的主(启动)Activity。


paused

ts
isSuspended: boolean = androidApp.paused

如果主应用程序活动未运行(已挂起),则返回 true,否则返回 false。


backgrounded

ts
isInBackground: boolean = androidApp.backgrounded

如果主应用程序活动处于后台,则返回 true


registerBroadcastReceiver

ts
receiver = androidApp.registerBroadcastReceiver(intentFilter, onReceiveCallback)

注册 BroadcastReceiver 以在主活动线程中运行。接收器将使用与意图过滤器匹配的任何广播意图进行调用。

onReceiveCallback:每次收到广播时都会调用的回调函数。


getRegisteredBroadcastReceiver

ts
androidApp.getRegisteredBroadcastReceiver(intentFilter)

获取为指定意图过滤器注册的 BroadcastReceiver。


unregisterBroadcastReceiver

ts
androidApp.unregisterBroadcastReceiver(intentFilter)

取消注册之前为指定意图过滤器注册的 BroadcastReceiver。


Android Activity 生命周期事件

要处理 Android 的应用程序生命周期事件,请使用

ts
androidApp.on('activityResumed', (args) => {
  //handle the event here
})
更多 Android Activity 生命周期事件
  • activityCreated
  • activityDestroyed
  • activityStarted
  • activityPaused
  • activityStopped
  • saveActivityState
  • activityResult
  • activityBackPressed
  • activityNewIntent
  • activityRequestPermissions

iOS 参考

ios

ts
iOSApp = Application.ios

此属性为您提供 iOSApplication 对象,它是围绕原生 iOS 应用程序实例的 Nativescript 包装器。


rootController

ts
rootController: UIViewController = iOSApp.rootController

iOS 应用程序的根视图控制器。


window

此属性提供关键的 窗口,它是应用程序视图的容器,其作用之一是将触摸事件传递给视图。视图是用户界面项目,例如按钮、标签或滚动视图。


delegate(iOS 生命周期事件)

js
const MyDelegate = (function (_super) {
  __extends(MyDelegate, _super)
  function MyDelegate() {
    _super.apply(this, arguments)
  }
  MyDelegate.prototype.applicationDidFinishLaunchingWithOptions = function (
    application,
    launchOptions
  ) {
    console.log('applicationWillFinishLaunchingWithOptions: ' + launchOptions)
    return true
  }
  MyDelegate.prototype.applicationDidBecomeActive = function (application) {
    console.log('applicationDidBecomeActive: ' + application)
  }
  MyDelegate.ObjCProtocols = [UIApplicationDelegate]
  return MyDelegate
})(UIResponder)

Application.ios.delegate = MyDelegate
ts
@NativeClass()
class MyDelegate extends UIResponder implements UIApplicationDelegate {
  public static ObjCProtocols = [UIApplicationDelegate]

  applicationDidFinishLaunchingWithOptions(
    application: UIApplication,
    launchOptions: NSDictionary<string, any>
  ): boolean {
    console.log('applicationWillFinishLaunchingWithOptions: ' + launchOptions)

    return true
  }

  applicationDidBecomeActive(application: UIApplication): void {
    console.log('applicationDidBecomeActive: ' + application)
  }
}
Application.ios.delegate = MyDelegate

iOS 系统监视应用程序的不同状态,并在每个状态下发出事件。要处理这些生命周期事件,您必须编写一个扩展 UIResponder 并实现 UIApplicationDelegate 类的类,并将 delegate 属性设置为该类。然后,您覆盖 UIApplicationDelegate 中的方法来处理事件。

有关 iOS 生命周期事件的完整列表,请访问 UIApplicationDelegate


orientation

ts
orientation = androidApp.orientation
// or
orientation = iOSApp.orientation

获取或设置应用程序的方向。
可能的值:portrait | landscape | unknown


systemAppearance

ts
systemAppearance = androidApp.systemAppearance
// or
systemAppearance = iOSApp.systemAppearance

返回系统外观是 darklight 还是 null(对于 iOS <= 11)。


参考

API 参考

名称类型
@nativescript/core/application模块

原生组件

AndroidiOS
android.app.ApplicationUIApplication