NativeScript android NotificationChannel错误

时间:2018-12-10 12:41:31

标签: android nativescript notification-channel

我有一个{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?

1 个答案:

答案 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。