Java 将活动从活动传递到广播接收器
我需要将活动实例传递给调用停止AlarmManager的方法 主要活动Java 将活动从活动传递到广播接收器,java,android,Java,Android,我需要将活动实例传递给调用停止AlarmManager的方法 主要活动 private void setAlarm(long timeInMilis) { alarmManager = (AlarmManager) getSystemService((Context.ALARM_SERVICE)); MyAlarm myAlarm = new MyAlarm(this); Intent intent = new Intent(this, myAlarm.getCl
private void setAlarm(long timeInMilis) {
alarmManager = (AlarmManager) getSystemService((Context.ALARM_SERVICE));
MyAlarm myAlarm = new MyAlarm(this);
Intent intent = new Intent(this, myAlarm.getClass());
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager.setRepeating(AlarmManager.RTC, timeInMilis, 10000, pendingIntent);
if (dbHelper.getProfile().getHp() >= 100) {
stopAlarmManager();
Toast.makeText(this, "Your character is fully healed.", Toast.LENGTH_LONG).show();
}
}
public void stopAlarmManager() {
if (alarmManager != null)
alarmManager.cancel(pendingIntent);
}
还有我的收音机
public class MyAlarm extends BroadcastReceiver {
MainActivity mainActivity;
public MyAlarm() {
}
public MyAlarm(MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
@Override
public void onReceive(Context context, Intent intent) {
DBHelper dbHelper = new DBHelper(context);
dbHelper.getWritableDatabase();
dbHelper.setHp("1", dbHelper.getProfile().getHp() + 40);
String currentHp = String.valueOf(dbHelper.getProfile().getHp());
if (Integer.parseInt(currentHp) < dbHelper.getProfile().getHpMax())
Toast.makeText(context, "Your character gain 40HP and now has: " + currentHp + "HP", Toast.LENGTH_LONG).show();
else {
Toast.makeText(context, "Your character is fully healed", Toast.LENGTH_LONG).show();
mainActivity.stopAlarmManager();
}
}
}
公共类MyAlarm扩展广播接收器{
主要活动主要活动;
公共警报(){
}
公共MyAlarm(主活动主活动){
this.mainActivity=mainActivity;
}
@凌驾
公共void onReceive(上下文、意图){
DBHelper DBHelper=新的DBHelper(上下文);
dbHelper.getWritableDatabase();
setHp(“1”,dbHelper.getProfile().getHp()+40);
String currentHp=String.valueOf(dbHelper.getProfile().getHp());
if(Integer.parseInt(currentp)
但这段代码会导致错误:由空对象引用上的:java.lang.InstantiationException:java.lang.Class引起。使用哪种方法创建MyAlarm实例?您在哪一行收到错误消息?如果我没有添加任何参数构造函数,那么我在mainActivity.stopAlarmManager()处会收到一个错误;由于空对象引用,您可以显示stopAlarmManager方法代码。好的,我添加了“我需要传递活动实例来调用停止AlarmManager的方法。”–不,您不需要。您只需要一个
上下文
就可以获得报警管理器
,以及相同的挂起内容
。一个上下文
被传递到接收方的onReceive()
方法中,只需像设置报警时一样构造它,就可以创建相同的pendingent
。