AlarmReceiver&通知方法导致崩溃?
问题描述:
我目前正在尝试设置日期选择器和时间选择器,以在到达时间时发出通知。我在MainActivity中创建了一个方法,并且正在从AlarmReceiver中调用。每当计时器达到设定值时,应用程序崩溃并且logcat中不显示错误。AlarmReceiver&通知方法导致崩溃?
我知道这是从AlarmReceiver调用这个方法,我只是不知道问题是什么。这个方法目前还与一个按钮有联系,当按下按钮(buttonStopAlarm)时,按钮会按照想要的方式触发通知),所以整体上该方法不起作用,从另一个类中调用时它不起作用。
任何帮助将不胜感激!谢谢!
AlarmReceiver
package servicealarmdemo.test2;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class AlarmReceiver extends BroadcastReceiver {
MainActivity main = new MainActivity();
@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(arg0, "Alarm received!", Toast.LENGTH_LONG).show();
main.addNotification();
}
}
答
通过这样做MainActivity main = new MainActivity();
你是刚刚创建的MainActivity
一个实例,但它不会有它的context
意味着this
时Activity
由OS
开始它基本上设置所以请将Notification code
移至Receiver
并使用arg0
作为context
public class AlarmReceiver extends BroadcastReceiver {
//MainActivity main = new MainActivity();
Context cxt;
@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(arg0, "Alarm received!", Toast.LENGTH_LONG).show();
cxt = arg0;
//main.addNotification();
addNotification();
}
public void addNotification() {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(cxt)
.setSmallIcon(R.drawable.icon_transperent)
.setContentTitle("Achieve Alert!")
.setContentText("This is a reminder for your deadline!");
Intent notificationIntent = new Intent(cxt, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(cxt, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
// Add as notification
NotificationManager manager = (NotificationManager)cxt.getSystemService(Context.NOTIFICATION_SERVICE);
builder.setVibrate(new long[] { 0, 1000, 1000, 1000, 1000 });
manager.notify(0, builder.build());
}
}
感谢您的回复,我已将其移交给AlarmReceiver。现在只有一个错误显示getSystemService。无法解析方法'getSystemService(java.lang.String)' – ZenoX
@ZenoX使用'cxt.getSystemService..' –
非常感谢您的帮助。我刚刚测试过,通知现在正在被触发!另外感谢您解释MainActivity代码作为一个实例,它真的帮助我理解! – ZenoX