android studio app上的预定通知。 alarmManager.set不起作用

时间:2017-08-20 18:15:23

标签: android notifications

这是我的Android应用程序的预定通知代码,但由于某种原因它什么也没做。请告诉我问题出在哪里。 另一个问题:我也发了一个按钮发送通知 - 只是为了学习,并且由于某种原因它只适用于我的三星s6。当我在android studio模拟器上运行应用程序时,它给出了一个关于通知包的错误。这是为什么? 非常感谢!

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

    }
}

1 个答案:

答案 0 :(得分:0)

根据您的评论,您似乎忘了注册您的BroadcastReceiver。根据Android文档,如果您先注册,您将只能在接收器上接收意图:

  

您可以使用Context.registerReceiver()动态注册此类的实例,也可以在AndroidManifest.xml中静态声明带有标记的实现。

由于您将广播直接发送到您的接收器:

Intent alertIntent = new Intent(this, AlertReceiver.class);

为此声明任何intent-filter毫无意义,因此您只需将以下行添加到AndroidManifest.xml(<application>标记内):

<receiver android:name="com.your.package.AlertReceiver" />

希望它有所帮助。