如何在Nativescript中正确获取Android应用程序上下文

时间:2019-10-28 19:39:02

标签: android nativescript angular2-nativescript nativescript-angular

我正在使用Android上的某些特定本机处理功能创建本机应用程序。由于需要在Android的onCreate()方法上初始化插件,因此我通过以下步骤扩展了Nativescript的主应用程序: https://docs.nativescript.org/core-concepts/android-runtime/advanced-topics/extend-application-activity

在放置日志并使用onCreate()方法后,我还可以确认自定义类是否已正确设置并可以正常工作:

在应用所需的初始化之前的代码:

import { isAndroid } from "tns-core-modules/ui/page/page";
import * as application from "tns-core-modules/application";

declare var co;
declare var android;
declare var applicationContext;

// const context = android.content.Context;
const BleManager = co.igloohome.ble.lock.BleManager;
var utilsModule = require("tns-core-modules/utils/utils");

@JavaProxy("org.myApp.Application")
class Application extends android.app.Application {
    onCreate(): void {
        super.onCreate();

        console.log("OnCreate() called");

    }

    attachBaseContext(baseContext: any) { // android.content.Context
        super.attachBaseContext(baseContext);
    }
}

使用此代码,我可以在日志上看到“已调用OnCreate()”,这意味着我的扩展程序正在工作。

现在,我正在尝试初始化SDK,因此我是根据如下文档进行的:

import { isAndroid } from "tns-core-modules/ui/page/page";
import * as application from "tns-core-modules/application";

declare var co;
declare var android;
declare var applicationContext;

// const context = android.content.Context;
const BleManager = co.igloohome.ble.lock.BleManager;
var utilsModule = require("tns-core-modules/utils/utils");

@JavaProxy("org.myApp.Application")
class Application extends android.app.Application {
    onCreate(): void {
        super.onCreate();

        console.log("OnCreate() called");

        //Setup Ble SDK
        BleManager(utilsModule.ad.getApplicationContext()).setDebug(true)

        console.log("OnCreate() end");
    }

    attachBaseContext(baseContext: any) { // android.content.Context
        super.attachBaseContext(baseContext);
    }
}

不幸的是,它吐出了一个错误:

JS: OnCreate() called
System.err: java.lang.RuntimeException: Unable to create application org.myApp.Application: com.tns.NativeScriptException:
System.err: Calling js method onCreate failed
System.err:
System.err: Error: Trying to link invalid 'this' to a Java object

我还可以确认“ BleManager”对象不是未定义的。仅此而已,我认为这可能是由于我传递了错误的应用程序上下文。 (该方法需要应用程序上下文进行初始化)。

如何在Nativescript中获得Android的Main Application上下文?

1 个答案:

答案 0 :(得分:0)

我相信您可以这样做:

import * as application from '@nativescript/core/application';


const ctx = application.android.context;

或(如果未使用作用域软件包):

import * as application from 'tns-core-modules/application';


const ctx = application.android.context;