Android 报警管理器工作不正常,通知无效';我没有出现

Android 报警管理器工作不正常,通知无效';我没有出现,android,android-notifications,Android,Android Notifications,所以我有两个类来构建通知,由于某种原因,它们都没有显示任何通知,尽管没有发现错误 我有 将接收器设置为AndroidManifest.xml 在生成器上使用setsmallicon 在MainActivity上运行它 这是第一个类NotificationHelper,它创建通道并执行大部分通知样板代码 import android.annotation.TargetApi; import android.app.NotificationChannel; import android.app.No

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

我有

  • 将接收器设置为
    AndroidManifest.xml
  • 在生成器上使用setsmallicon
  • 在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);
    
    }
    
    }

    以及receiver类
    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);
    }
    
    底部导航显示,所有内容都加载,只有通知不会显示。这款手机是搭载安卓28的诺基亚6.1。为什么通知不显示?

    onReceive()
    中,尝试将
    getNotificationManager()
    替换为
    notificationmanager compat.from(context)

    如果这样做有效,您可以修改
    getNotificationManager()
    并重新使用它


    如果它不起作用,请将
    startAlarm()
    替换为
    onReceive()
    中的代码,以帮助找出问题是出在警报还是通知上。

    尝试将
    getNotificationManager()
    替换为
    notificationmanager compat.from(上下文)时,会显示一条红色文本
    在接收时将
    startAlarm
    中的代码替换为
    onReceive
    中的代码,并且通知没有显示是
    导入android.support.v4.app.NotificationCompat
    可能吗?如何使用
    NotificationManager.compat
    构建频道?尝试替换
    getNotificationManager
    返回
    NotificationManager.compat
    ,通知和生成是否仍不显示
    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);
    }