NOTE! You are browsing legacy documentation. For latest visit docs.nativescript.org.

NativeScript Angular

Application

The Application module provides abstraction over the platform-specific Application implementations. It is the main BCL module and is required for other BCL modules to work properly. The default bootstrap.js implementation for each platform loads and initializes this module.

App Checking Target

Basic usage of the application module in a component to apply different code on Android and iOS

import { Component } from "@angular/core";
import { android as androidApp, ios as iosApp } from "tns-core-modules/application";

@Component({
    moduleId: module.id,
    templateUrl: "./app-checking-target.component.html"
})
export class AppCheckingTargetExampleComponent {
    public isItemVisible: boolean;

    constructor() {
        if (androidApp) {
            console.log("We are running on Android device!");
            this.isItemVisible = true;
        } else if (iosApp) {
            console.log("We are running on iOS device");
            this.isItemVisible = false;
        }
    }
}

App Using Android Specifics

Application Module Android Specific Properties

The application module provides a number of Android specific properties to access the Android app, context and activities.

// import { android as androidApp } from "tns-core-modules/application";
let isPaused = androidApp.paused; // e.g. false
let packageName = androidApp.packageName; // The package ID e.g. org.nativescript.nativescriptsdkexamplesng
let nativeApp = androidApp.nativeApp; // The native APplication reference
let foregroundActivity = androidApp.foregroundActivity; // The current Activity reference
let context = androidApp.context; console.log(context); // The current Android context

Using the Android Application Context

In the extended example below, the Android context is used to get the absolute path to Files directory. We are accessing methods from the Android SDK (like getCacheDir and getFilesDir)

this.fileList = [];
this.appContext = androidApp.context;

// https://developer.android.com/reference/android/content/Context.html#getFilesDir()
this.filesDir = this.appContext.getFilesDir();

// https://developer.android.com/reference/android/content/Context.html#getCacheDir()
this.cacheDir = this.appContext.getCacheDir();

let files = this.appContext.fileList();
for (let index = 0; index < files.length; index++) {
    let element = files[index];
    this.fileList.push(element.toString());
}

Registering a Broadcast Receiver (Android)

NativeScript can send/receive messages and system information though broadcast receivers. More on broadcast receivers in Android here.

this.batteryLife = "0";
let that = this;

// Broadcast Receiver https://developer.android.com/reference/android/content/BroadcastReceiver
androidApp.registerBroadcastReceiver(android.content.Intent.ACTION_BATTERY_CHANGED,
    function onReceiveCallback(androidContext: android.content.Context, intent: android.content.Intent) {
        let level = intent.getIntExtra(android.os.BatteryManager.EXTRA_LEVEL, -1);
        let scale = intent.getIntExtra(android.os.BatteryManager.EXTRA_SCALE, -1);
        let percent = (level / scale) * 100.0;

        that.batteryLife = percent.toString();
    });

Unregistering a Broadcast Receiver (Android)

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

App Using Ios Specifics

Application Module iOS Specific Properties

The application module provides a number of iOS specific properties to access the iOS app, delegate and root view controller, etc..

// import { ios as iosApp } from "tns-core-modules/application";

// https://developer.apple.com/documentation/uikit/uiapplicationdelegate?language=objc
let delegate = iosApp.delegate; // the iOS application delegate

let nativeApp = iosApp.nativeApp; // The native iOS app

// https://developer.apple.com/documentation/uikit/uiwindow/1621581-rootviewcontroller?language=objc
let rootController = iosApp.rootController; // the iOS rootViewController

let window = iosApp.window; // UIWindow

Adding a Notification Observer (iOS)

UIDevice.currentDevice.batteryMonitoringEnabled = true;
this.batteryLife = +(UIDevice.currentDevice.batteryLevel * 100);

let that = this;
let observer = iosApp.addNotificationObserver(UIDeviceBatteryLevelDidChangeNotification,
    function onReceiveCallback(notification: NSNotification) {
        that.batteryLife = +(UIDevice.currentDevice.batteryLevel * 100);
    });

Removing a notification observer

// When no longer needed, remove the notification observer
iosApp.removeNotificationObserver(observer, UIDeviceBatteryLevelDidChangeNotification);

Application Events

The application module provides cross-platform application events to handle different application states. With the provided application events the user can handle launch, resume, suspend and exit states or provide logic related to the screen orientation, uncaught errors and low memory events.

Use the application method on to add event listeners.

Launch Event

launchListener = (args: LaunchEventData) => {
    console.log("The appication was launched!");
};
on(launchEvent, launchListener);

Suspend Event

suspendListener = (args: ApplicationEventData) => {
    console.log("The appication was suspended!");
};
on(suspendEvent, suspendListener);

Resume Event

resumeListener = (args: ApplicationEventData) => {
    console.log("The appication was resumed!");
};
on(resumeEvent, resumeListener);

Exit Event

exitListener = (args: ApplicationEventData) => {
    console.log("The appication was closed!");
};
on(exitEvent, exitListener);

Displayed Event

displayedListener = (args: ApplicationEventData) => {
    console.log("NativeScript displayedEvent!");
};
on(displayedEvent, displayedListener);

Low Memory Event

lowMemoryListener = (args: ApplicationEventData) => {
    // the instance that has raised the event
    console.log("Instance: ", args.object);
};
on(lowMemoryEvent, lowMemoryListener);

Orientation Changed Event

orientationChangedListener = (args: OrientationChangedEventData) => {
    // orientationChangedEventData.newValue: "portrait" | "landscape" | "unknown"
    console.log("Orientation: ", args.newValue);
};
on(orientationChangedEvent, orientationChangedListener);

Uncaught Error Event

uncaughtErrorListener = (args: UnhandledErrorEventData) => {
    // UnhandledErrorEventData.error: NativeScriptError
    console.log("NativeScript Error: ", args.error);
};
on(uncaughtErrorEvent, uncaughtErrorListener);

API Reference for Application Class