Jak przekazać instancję Activity do BroadcastReceiver

0

Potrzebuję przekazać Activity żeby wywołać na niej metodę zatrzymującą AlarmManager.

MainActivity

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

}

and my BroadcastReceiver

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

Ale ten kod powoduje MainActivity.stopAlarmManager()' on a null object reference

0

Takie rzeczy powinno sie robic przez serwis a nie przez przekazywanie instancji activity do broadcast receivera. Jak system uwali Ci aktywność, to tez wyleci Ci NPE

0

Mógłbyś proszę rozpisać jak by to miało wyglądać? Byłbym wdzięczny.

0

Jako że context jest dostępny jako parametr okazuje się, że nie trzeba było prerabiać kodu. Wystarczył taki myk w onReceive

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

i już mogłem skancelować alarmManagera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1