Android Oreo 8.1中未显示本地通知

时间:2019-12-30 17:37:10

标签: java android notifications android-notifications notificationmanager

我有一个未显示本地通知的Android 8.1 Oreo设备。我从未为Android应用程序创建过通知,所以我不知道自己在做什么错。

这是我的代码。

在我的 SearchViewActivity.class-onCreate 方法

MyTimerTask myTask = new MyTimerTask();
Timer myTimer = new Timer();

myTimer.schedule(myTask, 5000, 10000); 

然后在onCreate方法之后,我在同一SearchViewActivity.class中有这段代码

 class MyTimerTask extends TimerTask {
 public void run() {


    generateNotification(getApplicationContext(), "Hello - Show AdTitle here ");

 }
}

private void generateNotification(Context context, String message) {



int icon = R.drawable.smallappicon;

long when = System.currentTimeMillis();
String appname = context.getResources().getString(R.string.app_name);

NotificationManager notificationManager = (NotificationManager) context
        .getSystemService(Context.NOTIFICATION_SERVICE);

int currentapiVersion = android.os.Build.VERSION.SDK_INT;



Notification notification;
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
        new Intent(context, SearchViewActivity.class), 0);


 if (currentapiVersion > android.os.Build.VERSION_CODES.HONEYCOMB)
{

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, null);

    notification = builder
            .setContentIntent(pendingIntent)
            .setSmallIcon(icon)
            .setTicker(appname)
            .setWhen(0)
            .setAutoCancel(true)
            .setContentTitle(appname)
            .setContentText(message)
            .setPriority(Notification.PRIORITY_MAX)
            .setOngoing(true)
            .setSubText("You have new alerts!")
            .setNumber(100)
            .build();


    if (currentapiVersion >= Build.VERSION_CODES.O)
    {


        String channelId = "my_channel_01"; 
        String channelName = appname; 
        int priority = NotificationManager.IMPORTANCE_HIGH;
        String channelDescription = “my_channel”;
        NotificationChannel channel =  new NotificationChannel(channelId, channelName,
                priority);
        channel.setDescription(channelDescription);
        channel.enableLights(true);
        channel.setLightColor(Color.RED);
        channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        notificationManager.createNotificationChannel(channel);
        builder.setChannelId(channelId);

    }
   else {
    builder.setContentTitle(context.getString(R.string.app_name))
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setColor(ContextCompat.getColor(context, R.color.md_blue_50))
            .setVibrate(new long[]{100, 250})
            .setLights(Color.YELLOW, 500, 5000)
            .setAutoCancel(true);
        }

    notificationManager.notify((int) when, notification);





    }

 }

在给定的时间间隔和代码之后,计时器也可以成功运行,但是当我的应用程序最小化或打开时,我的屏幕上仍未收到任何通知。我正在Android 8.1 Oreo设备上进行测试。

我正在使用尺寸为24x24 dp的小型应用图标。我的应用程序通知设置也已打开。

我将完全相同的名称“ my_channel_01”用作频道ID。我尚未在任何服务器上创建任何频道ID。我需要在某个地方创建频道ID吗?我们不能只使用任何唯一的字符串名称作为频道ID吗?

我没有在gradle文件和清单文件中添加任何代码来创建通知。我是否需要在其中添加一些代码才能使其正常工作?

我还没有创建任何在后台运行的服务。我不能仅使用此代码而不创建服务来显示通知吗?

我很困惑。我究竟做错了什么?此代码不足以创建本地通知吗?

请回复。

谢谢。

0 个答案:

没有答案