这是我为我的Android应用程序计划通知的代码,但由于某种原因它什么也没做。请告诉我问题出在哪里。 另一个问题:我还制作了一个发送通知的按钮 - 仅用于学习,出于某种原因,它仅适用于我的三星 s6。当我在 android 工作室模拟器上运行该应用程序时,它会给我一个关于通知包的错误。为什么? 多谢!
public void setAlarm(View view) {
Long alertTime = new GregorianCalendar().getTimeInMillis()+5*1000;
Intent alertIntent = new Intent(this, AlertReceiver.class);
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime,
PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT));
}
}
public class AlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
createNotification(context, "Time Up", "5 Seconds Has Passed", "Alert");
}
public void createNotification(Context context, String msg, String msgText, String msgAlert) {
PendingIntent noficitIntent = PendingIntent.getActivity(context, 0,
new Intent(context, MainActivity.class), 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(msg)
.setTicker(msgAlert)
.setContentText(msgText);
mBuilder.setContentIntent(noficitIntent);
mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, mBuilder.build());
}
}
根据您的评论,您似乎只是忘记注册您的广播接收器。根据 Android 文档,您只有在先注册接收器时才能在接收器上接收意图:
您可以使用 Context.registerReceiver(( 动态注册此类的实例,也可以在 AndroidManifest.xml 中使用标记静态声明实现。
由于您像这样直接向接收器发送广播:
Intent alertIntent = new Intent(this, AlertReceiver.class);
为它声明任何intent-filter
是没有意义的,所以你只需要在你的AndroidManifest.xml中添加以下行(在<application>
标签内(:
<receiver android:name="com.your.package.AlertReceiver" />
希望对您有所帮助。