我有一个未显示本地通知的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文件和清单文件中添加任何代码来创建通知。我是否需要在其中添加一些代码才能使其正常工作?
我还没有创建任何在后台运行的服务。我不能仅使用此代码而不创建服务来显示通知吗?
我很困惑。我究竟做错了什么?此代码不足以创建本地通知吗?
请回复。
谢谢。