【问题标题】:java.lang.RuntimeException: Unable to start receiverjava.lang.RuntimeException:无法启动接收器
【发布时间】:2017-05-20 13:24:56
【问题描述】:

我是 Android 的初学者。我正在尝试在特定日期显示通知。当我尝试运行 showNotification() 方法时,出现以下错误:

java.lang.RuntimeException: 无法启动接收器 com.example.azernax.dforget.ScheduleNotification: java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.String android.content.Context.getPackageName()' 为空 对象引用

我已尝试修复此错误,但没有成功。

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 !!!!
}

通知中心:

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

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:
    Notification_center notification = new Notification_center();
    

    永远不要自己创建活动的实例,因为它永远无法正常工作。

    将代码从showNotification() 移动到onReceive()。您可以使用传递给onReceive()Context 来替代this 和对getSystemService() 的调用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      相关资源
      最近更新 更多