0

I have weird problem woke me up full night, any extra data put in intent in Broadcast, I don't find it later in the Broadcast receiver here is alarming class ( sender)

private class Alarming {

    private AlarmManager alarmManager;
    private Intent intent;
    private PendingIntent pendingIntent;

    Alarming() {
        intent = new Intent(TimetableActivity.this, SessionAlarm.class);
        alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    }

    public void setSessionAlarm(FiredAlarm firedAlarm) {

         /*
         we will correct day of month if needed, so we roll elapsed date
         to avoid instant alarming.
         */
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(firedAlarm.getDateInMillis());
        Calendar now = Calendar.getInstance();
        if (calendar.before(now)) {//if session date is before today
            calendar.set(Calendar.YEAR, now.get(Calendar.YEAR));
            calendar.set(Calendar.WEEK_OF_YEAR, now.get(Calendar.WEEK_OF_YEAR));
        }
        firedAlarm.setDateInMillis(calendar.getTimeInMillis());
        Bundle args = new Bundle();
        args.putParcelable(FIRED_ALARM_KEY, firedAlarm);
        intent.putExtras(args);
        intent.putExtra("INT", 54);
        

        pendingIntent =
                PendingIntent.getBroadcast(TimetableActivity.this, firedAlarm.getRequestedCode(), intent, PendingIntent.FLAG_UPDATE_CURRENT);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                firedAlarm.getDateInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES / 5, pendingIntent);
       

    }

    
}

and here is the broadcast receiver, intent can't receive any kinds of data, primitive, bundle, parcelable...etc

public class SessionAlarm extends BroadcastReceiver {
private static final String TAG = "session_alarm_tag";
public static final String FIRED_ALARM_KEY = "fired_alarm_key";
FiredAlarm firedAlarm;
int requestCode;

@Override
public void onReceive(Context context, Intent intent) {
    Log.i(TAG, " Received Integer : " + intent.getIntExtra("INT", -1));
    Bundle bundle = intent.getExtras();
    firedAlarm = bundle.getParcelable(FIRED_ALARM_KEY);
    if (firedAlarm != null) {
       //TODO Blabla...
    } else Log.i("onReceive", "no parcelable fired alarm found!");

}
private void createNotification(Context context, FiredAlarm firedAlarm) {
    //TODO
   

}

Here is FiredAlarm class :

public class FiredAlarm implements Parcelable {

private int requestedCode;
private long dateInMillis;
private String classroom;
private int duration;

public String getClassroom() {
    return classroom;
}

public void setClassroom(String classroom) {
    this.classroom = classroom;
}

public int getDuration() {
    return duration;
}

public void setDuration(int duration) {
    this.duration = duration;
}


public FiredAlarm(int requestedCode, long dateInMillis) {
    this.requestedCode = requestedCode;
    this.dateInMillis = dateInMillis;
}

public void setRequestedCode(int requestedCode) {
    this.requestedCode = requestedCode;
}

public void setDateInMillis(long dateInMillis) {
    this.dateInMillis = dateInMillis;
}

public int getRequestedCode() {
    return requestedCode;
}

public long getDateInMillis() {
    return dateInMillis;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(this.requestedCode);
    dest.writeLong(this.dateInMillis);
    dest.writeString(this.classroom);
    dest.writeInt(this.duration);
}

public void readFromParcel(Parcel source) {
    this.requestedCode = source.readInt();
    this.dateInMillis = source.readLong();
    this.classroom = source.readString();
    this.duration = source.readInt();
}

protected FiredAlarm(Parcel in) {
    this.requestedCode = in.readInt();
    this.dateInMillis = in.readLong();
    this.classroom = in.readString();
    this.duration = in.readInt();
}

public static final Parcelable.Creator<FiredAlarm> CREATOR = new Parcelable.Creator<FiredAlarm>() {
    @Override
    public FiredAlarm createFromParcel(Parcel source) {
        return new FiredAlarm(source);
    }

    @Override
    public FiredAlarm[] newArray(int size) {
        return new FiredAlarm[size];
    }
};

}

I always get negative result, no data, is it really a bug on new SDK 30 level or what?

omarb1989
  • 111
  • 5

1 Answers1

0

I disabled sending object, so primitive worked, obviously I'm gonna convert my object to bytes. that solution will work as it's confirmed all the time.

omarb1989
  • 111
  • 5