2017-05-20 46 views
1

我是Android的初学者。我正试图在特定日期显示通知。当我尝试运行showNotification()我得到以下错误的方法:java.lang.RuntimeException:无法启动接收器

java.lang.RuntimeException: Unable to start receiver com.example.azernax.dforget.ScheduleNotification: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

我已经尝试了这个错误没有成功。

ScheduleNotification:

public class ScheduleNotification extends WakefulBroadcastReceiver { 

private AlarmManager alarmManager; 

@Override 
public void onReceive(Context context, Intent intent) { 
    ScheduleNotification.completeWakefulIntent(intent); 

    //create notification to show !!! 
    Toast.makeText(context, "TEST schedule!!!! ", Toast.LENGTH_LONG).show(); 
    Notification_center notification = new Notification_center(); 
    notification.showNotification(); //######################### CRASH !!!! 
} 

Notification_center:

public class Notification_center extends AppCompatActivity { 

public void showNotification() 
{ 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
    builder.setSmallIcon(R.drawable.icon); 
    builder.setContentTitle("dF Notification!"); 
    builder.setContentText("description"); //--description event-- 

    Intent intent = new Intent(this, MainActivity.class); 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(intent); 

    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(pendingIntent); 
    NotificationManager NM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    NM.notify(0,builder.build()); 
} 

回答

1
Notification_center notification = new Notification_center(); 

NEVER创建活动自己的实例,因为它从来没有正常工作。

将代码从showNotification()移到onReceive()。您可以使用传入onReceive()Context作为this的替代以及拨打getSystemService()

另外,这里不需要WakefulBroadcastReceiver。这适用于需要将工作委派给其他人的情况(例如,IntentService)。如果所有工作在onReceive()结束时完成,则不需要管理单独的WakeLock,这是WakefulBroadcastReceiver的用途。

相关问题