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
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);
}