Как правильно получить контекст приложения Android в Nativescript - PullRequest
1 голос
/ 28 октября 2019

Я создаю приложение Nativescript с определенной обработкой на Android. Поскольку это было необходимо для инициализации плагина в методе onCreate () Android, я расширил Основное приложение 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" не является неопределенным. Только это, я думаю, это может быть связано с тем, что я передаю неверный контекст приложения. (Для инициализации метода требуется контекст приложения).

Как получить основной контекст приложения Android в Nativescript?

1 Ответ

0 голосов
/ 08 ноября 2019

Я считаю, что вы можете сделать это так:

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


const ctx = application.android.context;
...