2017-10-21 110 views
0

我写了一个应该显示通知的代码。我从TimePicker组件中选择小时和分钟(在给定时间每天弹出通知),然后为Notification接收器创建一个意图。数据库用适当的信息进行更新,所有内容都使用AlarmManager进行设置。请求代码(“代码”变量)对于每个通知都是唯一的。我下面粘贴代码片段:Android通知不显示

SettingActivity类:

findViewById(R.id.buttonNotification).setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view){ 
      int hour, minute, id; 
      Calendar calendar = Calendar.getInstance(); 
      PendingIntent pendingIntent; 
      calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour()); 
      calendar.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 

      Intent intent = new Intent(getApplicationContext(),Notifcation_receiver.class); 
      hour = timePicker.getCurrentHour(); 
      minute = timePicker.getCurrentMinute(); 

      if(extra!=null){ 
       pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),extra.getInt("Code"),intent,PendingIntent.FLAG_UPDATE_CURRENT); 
       intent.putExtra("Code",extra.getInt("Code")); 
       db.updateNotification(hour,minute,extra.getInt("ID")); 
      } 
      else{ 
       int code= Notification.getID(); 
       intent.putExtra("Code",code); 
       pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),code,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
       db.insertNotification(hour,minute); 
      } 
      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent); 
      startActivity(new Intent(SettingActivity.this, NotificationActivity.class)); 
     } 
    }); 
} 

通知接收器类:

public class Notifcation_receiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    int code = intent.getIntExtra("Code",0); 
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Intent repeating_intent = new Intent(context,MainActivity.class); 
    repeating_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context,code,repeating_intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
      .setContentIntent(pendingIntent) 
      .setSmallIcon(android.R.drawable.arrow_up_float) 
      .setContentTitle("title") 
      .setContentText("text") 
      .setAutoCancel(false); 

    notificationManager.notify(code,builder.build()); 
} 

}

我似乎无法找到问题,导致缺​​乏的计划通知。感谢您的任何帮助。

+1

你的targetSdkVersion是什么?如果它大于25,则检查此[问题](https://stackoverflow.com/questions/43093260/notification-not-showing-in-android-8-oreo/43093261)。 – Mehmed

+0

在API 26(logcat日志)上测试: “E/NotificationService:找不到pkg = com.example.kuba.quizapp,channelId = null的通道” –

+0

感谢您提供一个好的提示! –

回答

0

问题是,正如Mehmed所述,没有为NotificationService设置通道。

logcat的日志:

“E/NotificationService:否通道发现PKG = com.example.kuba.quizapp,渠道ID = NULL”

它工作于API 22,但25及更高版本的通知必须与额外的频道信息一起构建。