我有一个{N}应用,可以触发通知。
我正在使用notificationChannel,但是当应用程序崩溃时,我仍然收到相同的错误。
"System.err: TypeError: android.NotificationChannel is not a constructor"
我的代码是:
android.app.job.JobService.extend("com.tns.notifications.MyJobService", {
onStartJob: function(params) {
console.log("Job execution ...");
// Do something useful here, fetch data and show notification for example
var utils = require("utils/utils");
var context = utils.ad.getApplicationContext();
// var res=GeofenceService.mainFunction()
// console.log("res",res)
var builder = new android.app.Notification.Builder(context);
builder.setContentTitle("Scheduled Notification")
.setAutoCancel(true)
.setColor(android.R.color.holo_purple)//getResources().getColor(R.color.colorAccent))
.setContentText("This notification has been triggered by Notification Service")
.setVibrate([100, 200, 100])
.setSmallIcon(android.R.drawable.btn_star_big_on);
// will open main NativeScript activity when the notification is pressed
var mainIntent = new android.content.Intent(context, com.tns.NativeScriptActivity.class);
var mNotificationManager = context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
// The id of the channel.
const channelId = "my_channel_01";
// The user-visible name of the channel.
const name = "Channel name";
// The user-visible description of the channel.
const description = "Channel description";
const importance = android.app.NotificationManager.IMPORTANCE_LOW;
const mChannel = new android.app.NotificationChannel(channelId, name,importance);
// Configure the notification channel.
mChannel.setDescription(description);
mChannel.enableLights(true);
// Sets the notification light color for notifications posted to this
// channel, if the device supports this feature.
mChannel.setLightColor(android.graphics.Color.RED);
mChannel.enableVibration(true);
mNotificationManager.createNotificationChannel(mChannel);
builder.setChannelId(channelId);
mNotificationManager.notify(1, builder.build());
return false;
},
onStopJob: function() {
console.log("Stopping job ...");
}
});
此行中的错误:
const mChannel = new android.app.NotificationChannel(channelId, name,importance);
他为什么告诉我NotificationChannel不是构造函数? 我错过了什么?
这是我获得此代码的地方,它似乎对其他人也有用。
https://github.com/NativeScript/sample-android-background-services
编辑:
我只是检查了我的API级别及其26,因此即使使用了if语句,也要检查通道行是否被击碎。
当我在android清单中查看我的platform文件夹时,我看到了:
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="25"/>
为什么是25?
答案 0 :(得分:0)
android.app.NotificationChannel仅在API级别26及更高版本(Android 8.0-Oreo)上可用。如果使用的是较早版本,它将抛出该错误。
在访问这些api之前,您必须检查版本,例如
if (android.os.Build.VERSION.SDK_INT >= 26) {
const mChannel = new android.app.NotificationChannel(channelId, name,importance);
}
更新:
您必须将目标SDK设置为更高版本,至少为26。如果您定位到更低版本since August 2018,则甚至无法将APK上传到Google Play。