I am having this weird problem where the intent.getParcelableExtra()
is working fine on API 23 but not on API 25, it is returning NULL.
Here is how I reproduced the problem with less code:
User class as example:
public class User implements Parcelable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age =age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(name);
out.writeInt(age);
}
public User(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
}
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
/*setting view*/
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
User user = new User("test", 25);
intent.putExtra("user", user);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);
}
}
And the receiver:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
android.os.Debug.waitForDebugger();
User user = intent.getParcelableExtra("user");
}
}
I am using the debugger to stop execution and evaluate the user object in the receiver.
When using the emulator Android 6.0 API level 23 : the user is passed correctly, but when using my phone Android 7.1.2 API level 25 : the user is NULL
Any help is appreciated.