API 25 일, 그것은 NULL을 반환합니다. 예를 들어intent.getParcelableExtra() API 23 일에 있지만 나는 <code>intent.getParcelableExtra()</code>이 <strong>API 25</strong>에 <strong>API (23)</strong> 아니라에서 잘 작동이 이상한 문제가 있습니다
사용자 클래스 : 여기
내가 적은 코드로 문제를 재현하는 방법이다
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);
}
}
그리고 수신기
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
android.os.Debug.waitForDebugger();
User user = intent.getParcelableExtra("user");
}
}
나는 디버거를 사용하여 실행을 중지하고 사용자 개체를 수신기에서 평가합니다.
에뮬레이터 안드로이드 6.0 API 레벨 23 사용 : 내 휴대 전화 안드로이드 7.1.2 API 레벨 25을 사용하는 경우 사용자가 제대로 전달을하지만, : 사용자가 어떤 도움에 감사드립니다 NULL입니다.
https://commonsware.com/blog/2016/07/22/be-careful-where-you-use-custom-parcelables.html – CommonsWare