简体   繁体   English

在 NativeScript 中使用 Android 原生代码 (JAVA)

[英]use Android Native code (JAVA) in NativeScript

i want to use native android code in my NativeScript app to check if there is update available in play store.我想在我的 NativeScript 应用程序中使用原生 android 代码来检查 Play 商店中是否有可用的更新。

I am using official android docs.我正在使用官方 android 文档。

Support in app updates Android 支持应用程序更新 Android

The native java code is below本机java代码如下

 // Creates instance of the manager.
AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);

// Returns an intent object that you use to check for an update.
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          // For a flexible update, use AppUpdateType.FLEXIBLE
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
              // Request the update.
    }
});

and NavtiveScript code is below和 NavtiveScript 代码如下

import { Injectable } from '@angular/core';
import { ad as androidUtilities } from 'tns-core-modules/utils/utils';
declare const com: any;

@Injectable({
  providedIn: 'root'
})
export class AppUpdateService {

  constructor() {
  }

  public checkForUpdate() {
    try {
      const context = androidUtilities.getApplicationContext();
      const appUpdateManager = com.google.android.play.core.appupdate.AppUpdateManagerFactory.create(context);
      appUpdateManager.getAppUpdateInfo().addOnSuccessListener(appUpdateInfo =>  {

      });
    } catch (err) {
      console.log('Err in checkForUpdate() : ', err);
    }
  }

}

and i am getting this error我收到这个错误

JS: Err in checkForUpdate() : Error: Cannot convert object to Lcom/google/android/play/core/tasks/OnSuccessListener; JS:在 checkForUpdate() 中出错:错误:无法将对象转换为 Lcom/google/android/play/core/tasks/OnSuccessListener; at index 0在索引 0

Can anyone tell me what i am doing wrong.谁能告诉我我做错了什么。

You need to pass the marshaled (converted from Java to JavaScript) native Android listener as shown in this documentation seciton .您需要传递编组(从 Java 转换为 JavaScript)本机 Android 侦听器,如本文档部分所示。 In your case, you should create a success listener with the rules shown in the article.在您的情况下,您应该使用文章中显示的规则创建一个成功侦听器。

The solution for this problem is below这个问题的解决方案如下

import { Injectable } from '@angular/core';
import { ad as androidUtilities } from 'tns-core-modules/utils/utils';
import { AppUpdateAvailability } from '~/app/models/interfaces/app-update-availability.interface';
declare const com: any;

@Injectable({
  providedIn: 'root'
})
export class AppUpdateService {

  constructor() {
  }

  public checkForUpdate(): Promise<AppUpdateAvailability> {
    return new Promise((res, rej) => {
      try {
        const context = androidUtilities.getApplicationContext();
        const appUpdateManager = com.google.android.play.core.appupdate.AppUpdateManagerFactory.create(context);
        const appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
        appUpdateInfoTask.addOnSuccessListener(new com.google.android.play.core.tasks.OnSuccessListener({
          onSuccess: function (AppUpdateInfo: any) {
            const UpdateAvailability = com.google.android.play.core.install.model.UpdateAvailability;
            switch (AppUpdateInfo.updateAvailability()) {
              case UpdateAvailability.UNKNOWN:
                res(AppUpdateAvailability.Unknown);
                break;
              case UpdateAvailability.UPDATE_NOT_AVAILABLE:
                res(AppUpdateAvailability.UpdateNotAvailable);
                break;
              case UpdateAvailability.UPDATE_AVAILABLE:
                res(AppUpdateAvailability.UpdateAvailable);
                break;
              case UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS:
                res(AppUpdateAvailability.DeveloperTriggeredUpdateInProgress);
                break;
              default:
                rej('App update : Something went wrong!');
                break;
            }
          }
        }));
      } catch (err) {
        rej('Err in checkForUpdate() : Code error');
      }
    });

  }



}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在nativescript中使用本机android小部件类型定义? - How to use the native android widgets type definitions in nativescript? NativeScript : 将原生 android 项目添加到 nativescript - NativeScript : Adding native android project to nativescript 如何将 Mapbox GL Native Android Activity 示例 Java 应用程序翻译成 NativeScript? - How to translate Mapbox GL Native Android Activity example Java app into NativeScript? 在Phonegap(Java Android)中运行本机代码 - Run native code in Phonegap (Java Android) 在Java代码中使用Android .so - Use Android .so in Java code Nativescript,如何在 Javascript 中使用这个 java eventListener? - Nativescript, how to use this java eventListener in Javascript? 如何在Android代码中使用.so文件来使用本机方法 - How to use .so file in Android code to use the native methods 如何显式释放 Java/Android 中本机代码使用的内存 - How to explicitly free memory that was used by native code in Java/Android Android中的Java密码学标准库是否作为本机代码运行 - Is Java Cryptography standard libraries in Android run as native code 运行android本机代码导致java.lang.UnsatisfiedLinkError - Running android native code is causing java.lang.UnsatisfiedLinkError
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM