android - 警报管理器无法正常工作,通知不会出现
问题描述
所以我有两个类来构建通知,由于某种原因,尽管没有发现任何错误,但它们都没有显示任何通知。
我有
- 开启接收器
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);
}
}
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。为什么不显示通知?
解决方案
在onReceive()
中,尝试替换getNotificationManager()
为NotificationManagerCompat.from(context)
。
如果可行,您可以修改getNotificationManager()
并重新使用它。
如果还是不行,用startAlarm()
里面的代码替换一下,onReceive()
看看是报警还是通知的问题。
推荐阅读
- java - Lucene MultiFieldQueryParser 不起作用
- html - 如何在图像向右浮动时使文本重叠
- python - 如何改进这个交替迭代器的 Python 3 代码?
- c# - 是 IEnumerable
, 任务 和 IDisposable 在 C# 编译器中硬编码? - database-normalization - 数据库表结构的正确格式是什么
- javascript - 向用户显示消息
- vba - VBA。使用另一个工作簿作为模板创建新工作簿并从列表中命名每个新工作簿
- html - 你如何制作一个与标题重叠的多边形形状?
- excel - Excel 范围格式未按预期呈现(转换问题)
- c++ - 如何创建 LPOLESTR 类型的变量或常量?