首页 > 解决方案 > 警报管理器无法正常工作,通知不会出现

问题描述

所以我有两个类来构建通知,由于某种原因,尽管没有发现任何错误,但它们都没有显示任何通知。

我有

  1. 开启接收器AndroidManifest.xml
  2. 在构建器上使用 setsmallicon
  3. 在 MainActivity 上运行它

这是第一个NotificationHelper创建通道并执行大部分通知的样板代码的类

import android.annotation.TargetApi;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.os.Build;
import android.support.v4.app.NotificationCompat;


public class NotificationHelper extends ContextWrapper {

public static String CHANNEL_ID = "channel_01";
public static CharSequence CHANNEL_NAME = "dicoding channel";
private NotificationManager notificationManager;
NotificationChannel channel;

public NotificationHelper(Context base) {
    super(base);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        createChannels();
    }
}

@TargetApi(Build.VERSION_CODES.O)
public void createChannels() {

    channel = new NotificationChannel(CHANNEL_ID,
            CHANNEL_NAME,
            NotificationManager.IMPORTANCE_DEFAULT);
    channel.enableVibration(true);
    channel.enableLights(true);
    channel.setLockscreenVisibility(MODE_PRIVATE);

    if (notificationManager != null) {
        getNotificationManager().createNotificationChannel(channel);
    }
}

public NotificationManager getNotificationManager() {
    if (notificationManager == null) {
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    }
    return notificationManager;
}

public NotificationCompat.Builder getChannelNotification() {
    return new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
            .setContentTitle("Film Tv")
            .setContentText("Hey, cek katalog movie kamu sekarang!")
            .setSmallIcon(android.R.drawable.sym_def_app_icon);

}

}

AlertReceiver以及扩展 BroadcastReceiver 以构建通知的接收器类

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;


public class AlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    NotificationHelper notificationHelper = new NotificationHelper(context);
    NotificationCompat.Builder nb = notificationHelper.getChannelNotification();
    notificationHelper.getNotificationManager().notify(1, nb.build());


 }
}

这是包含的主要活动BottomNavigation,所以我将其称为BottomNavigation您应该将通知放入的位置。但奇怪的是,只有底部导航加载而不是通知。

import android.annotation.TargetApi;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

import java.util.Calendar;

. . . . . .. . . . . . ..

public class BottomNavigation extends AppCompatActivity {


BottomNavigationView navView;
Toolbar toolbar;
private String title;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bottom_navigation);
    navView = findViewById(R.id.nav_view);
    toolbar = findViewById(R.id.toolbar);

    // placing toolbar in place of action bar
    setSupportActionBar(toolbar);

    startAlarm();
    bottomNavigation();

    . . . . . . . . . . .  . . . . . . .

}

@TargetApi(Build.VERSION_CODES.KITKAT)
private void startAlarm() {
    Calendar c = Calendar.getInstance();
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent intent = new Intent(this, AlertReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);

    c.set(Calendar.HOUR_OF_DAY, 20);
    c.set(Calendar.MINUTE, 27);
    c.set(Calendar.SECOND, 30);

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
}

底部导航出现了,一切都加载了,只有通知不会出现。手机是诺基亚 6.1 和 Android 28。为什么不显示通知?

标签: androidandroid-notifications

解决方案


onReceive()中,尝试替换getNotificationManager()NotificationManagerCompat.from(context)

如果可行,您可以修改getNotificationManager()并重新使用它。

如果还是不行,用startAlarm()里面的代码替换一下,onReceive()看看是报警还是通知的问题。


推荐阅读