如何在服务中实现通知?

时间:2016-07-31 16:30:31

标签: android notifications

当我在Alarm Receiver类中收到特定警报时,我会尝试发送通知,然后向后台运行的另一个服务发送通知。

我收到此错误:

Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

我对这个主题进行了很多研究,但我发现的解决方案都没有奏效。

这是警报接收器类

public void onReceive(Context context, Intent intent)
    {
        switch(intent.getIntExtra("DosageIdentifier",-1)) {
            case 1:
            {
                for(int i = 0; i < SetMyAlarm.countSeqWithDatabaseList.size(); i++)
                {
                    prescriptionString = SetMyAlarm.prescriptionList.get(i);
                    myNotification.acceptNotificationString(prescriptionString);

                }
                break;
            }

这是我的 SetMyAlarm服务

public void acceptNotificationString(String text)
    {
        sendNotification(text);
    }
    private void sendNotification(String text) {
        try {
            Intent notificationIntent = new Intent(this, MainActivity.class);
            notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            int flags = PendingIntent.FLAG_UPDATE_CURRENT;
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, flags);

            int icon = R.mipmap.ic_launcher;
            CharSequence tickerText = "ALERT";
            CharSequence contentTitle = "Notification";
            CharSequence contentText = text;

            Notification notification = new Notification.Builder(this)
                    .setSmallIcon(icon)
                    .setTicker(tickerText)
                    .setContentTitle(contentTitle)
                    .setContentText(contentText)
                    .setContentIntent(pendingIntent)
                    .setAutoCancel(true)
                    .build();

            NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            final int NOTIFICATION_ID = 1;
            manager.notify(NOTIFICATION_ID, notification);
        }
        catch (NullPointerException e)
        {
            e.printStackTrace();
        }
    }

这是我得到的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    at android.content.ContextWrapper.getPackageName(ContextWrapper.java:133)
    at android.content.ComponentName.<init>(ComponentName.java:128)
    at android.content.Intent.<init>(Intent.java:4449)
    at timertesting.kaad.timertesting.SetMyAlarm.sendNotification(SetMyAlarm.java:564)
    at timertesting.kaad.timertesting.SetMyAlarm.acceptNotificationString(SetMyAlarm.java:560)
    at timertesting.kaad.timertesting.AlarmReceiver.onReceive(AlarmReceiver.java:23)
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2725)
    at android.app.ActivityThread.-wrap14(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

任何建议?

1 个答案:

答案 0 :(得分:0)

你可以试试下面的代码吗?

public void onReceive(Context context, Intent intent) {
    ...
    for(int i = 0; i < SetMyAlarm.countSeqWithDatabaseList.size(); i++) {
        prescriptionString = SetMyAlarm.prescriptionList.get(i);
        myNotification.acceptNotificationString(context, prescriptionString);
    }
    ...
}


public void acceptNotificationString(Context context, String text) {
    sendNotification(context, text);
}

private void sendNotification(Context context, String text) {
    try {
        Intent notificationIntent = new Intent(context, MainActivity.class);
        ....
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, flags);
        ...
        Notification notification = new Notification.Builder(context)
        ....
        NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
    }
}