[英]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.