Мне нужно сохранить объект PendingIntent, который я получаю из объекта StatusBarNotification. PendingIntent pendingIntent = sbn.getNotification(). ContentIntent;Как сохранить ожидающее намерения локально на телефоне
ответ
A PendingIntent
может быть сериализован в поток байтов, так как это Parcelable
. Создайте Parcel
, позвоните writeToParcel()
на PendingIntent
, чтобы сериализовать объект в Parcel
, затем позвоните marshall()
по адресу Parcel
, чтобы получить байты, которые затем можно записать в файл на устройстве.
ПРИМЕЧАНИЕ: Интерфейс Parcelable
не предназначен для долговременного сохранения, поэтому во всех случаях это может не работать. Это зависит от того, для чего вы хотите его использовать.
Спасибо @DavidWasser за ответ. Я пробовал этот подход, и я получил сообщение об ошибке: попытался собрать парцеллу, содержащую объекты Binder. Как мне это преодолеть? –
Извините, вы не можете. Есть некоторые вещи, которые можно поместить в «Посылку», которая не может быть сериализована. Почему вы пытаетесь это сделать? Возможно, мы сможем найти другой способ решить вашу проблему. –
Мне нужно сохранить ожидающий ответ, который я получаю из уведомлений других приложений, чтобы позднее запустить их из моего приложения[email protected] –
читать:
PendingIntent pi = PendingIntent.readPendingIntentOrNullFromParcel(parcel);
Пишите:
PendingIntent.writePendingIntentOrNullToParcel(PendingIntent,parcel);
редактировать 1:
Parcels cannot be saved right? @ceph3us – Terrel Lewis
Вы можете "Сохранить" Parcelable или посылок
Parcelable ----->
Parcel.obtain() ----->
Parcelable.writeToParcel(Parcel,0) -----> // write to parcel
Parcel.marshal() ----- > byte[]
тогда байты могут сохраняться в базе данных файлов или в любом другом постоянном или не хранилище данных. Одна вещь, которую вы можете сделать, это Маршаллизация parcelabl, который содержит объект IBinder далее:
перед вами маршалом класс объекта вам необходимо удалить связующее вещество - ссылка на связующее хранится в пространстве ядра. Если связующее происходит от вас, вы должны легко создать новый и позже назначить немаршалированные данные.
Посылки не могут быть сохранены правильно? @ ceph3us –
Решение, которое работает для собственного производства PendingIntents (предотвращает "java.lang.RuntimeException: Пытался Маршалл посылки, который содержал объекты связующего вещества."):
public class PersistentPendingIntent implements Parcelable
{
private enum PendingIntentType{SERVICE, BROADCAST, ACTIVITY}
@NonNull
private final PendingIntentType pendingIntentType;
protected final int requestCode;
protected final int flags;
@NonNull
protected final Intent intent;
private PersistentPendingIntent(@NonNull PendingIntentType pendingIntentType, int requestCode, @NonNull Intent intent, int flags)
{
this.pendingIntentType = pendingIntentType;
this.flags = flags;
this.intent = intent;
this.requestCode = requestCode;
}
@Nullable
public PendingIntent getPendingIntent(@NonNull Context context)
{
PendingIntent pendingIntent = null;
switch (pendingIntentType)
{
case SERVICE:
pendingIntent = PendingIntent.getService(context, requestCode, intent, flags);
break;
case BROADCAST:
pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, flags);
break;
case ACTIVITY:
pendingIntent = PendingIntent.getActivity(context, requestCode, intent, flags);
break;
}
return pendingIntent;
}
public static PersistentPendingIntent getService(int requestCode, @NonNull Intent intent, int flags)
{
return new PersistentPendingIntent(PendingIntentType.SERVICE, requestCode, intent, flags);
}
public static PersistentPendingIntent getActivity(int requestCode, @NonNull Intent intent, int flags)
{
return new PersistentPendingIntent(PendingIntentType.ACTIVITY, requestCode, intent, flags);
}
public static PersistentPendingIntent getBroadcast(int requestCode, @NonNull Intent intent, int flags)
{
return new PersistentPendingIntent(PendingIntentType.BROADCAST, requestCode, intent, flags);
}
@Override
public int describeContents()
{
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeInt(this.pendingIntentType.ordinal());
dest.writeInt(this.requestCode);
dest.writeInt(this.flags);
dest.writeParcelable(this.intent, flags);
}
protected PersistentPendingIntent(Parcel in)
{
int tmpPendingIntentType = in.readInt();
this.pendingIntentType = PendingIntentType.values()[tmpPendingIntentType];
this.requestCode = in.readInt();
this.flags = in.readInt();
this.intent = in.readParcelable(Intent.class.getClassLoader());
}
public static final Creator<PersistentPendingIntent> CREATOR = new Creator<PersistentPendingIntent>()
{
@Override
public PersistentPendingIntent createFromParcel(Parcel source)
{
return new PersistentPendingIntent(source);
}
@Override
public PersistentPendingIntent[] newArray(int size)
{
return new PersistentPendingIntent[size];
}
};
}
Использование:
PersistentPendingIntent persistentPendingIntent = PersistentPendingIntent.getService(REQUEST_CANCEL, cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);
// Serialization
Parcel parcel = Parcel.obtain();
parcel.writeValue(persistentPendingIntent);
byte[] serializedPersistentPendingIntent = parcel.marshall();
parcel.recycle();
// Deserialization
parcel.unmarshall(serializedPersistentPendingIntent, 0, serializedPersistentPendingIntent.length);
parcel.setDataPosition(0);
persistentPendingIntent = (PersistentPendingIntent) parcel.readValue(PersistentPendingIntent.class.getClassLoader());
PendingIntent pendingIntent = persistentPendingIntent.getPendingIntent(context);
- 1. Как сохранить данные намерения
- 2. Сохранить stacktrace на телефоне
- 3. Android: сохранить аудиозапись локально?
- 4. Как локально сохранить объекты?
- 5. Как сохранить NSData локально
- 6. Как сохранить состояние от намерения
- 7. Сохранить изображение локально на Android
- 8. Сохранить Загрузка файла на телефоне
- 9. Как сохранить фонарик на телефоне Windows 8?
- 10. Как сохранить историю чата локально на Android?
- 11. Как сохранить метки локально на устройство?
- 12. Как сохранить строку локально в Android?
- 13. Android Wear: сохранить файл локально
- 14. Как сохранить графический график локально?
- 15. Хранение данных Whatsapp - все данные хранятся локально на телефоне?
- 16. Как сохранить ресурс JSON локально?
- 17. Как сохранить javascript-переменные локально?
- 18. Как зарегистрировать намерение SEND только для локальной галереи (изображения локально на моем телефоне)?
- 19. Добавить сохранить как изображение для общего намерения
- 20. Локально сохраняю видео vimeo на моем телефоне (PhoneGap Build APP)
- 21. Сохранить изображение в телефоне на SD-карте?
- 22. Как изменить стиль css локально и сохранить изменения
- 23. Как сохранить список в телефоне Windows 8
- 24. Как сохранить alpaca json файл локально
- 25. Как сохранить статус приложения в телефоне
- 26. Как сохранить данные локально в Realm?
- 27. Как сохранить данные входа локально в android
- 28. Как сохранить состояние приложения в телефоне Windows
- 29. Как сохранить расходные элементы IAP локально?
- 30. Как сохранить веб-страницу локально в iPhone?
См. Http://stackoverflow.com/questions/6661268/marshalling-a-notification-parcel –
Это было опубликовано еще в 2012 году. По-прежнему это не похоже на конкретное решение. Было бы интересно решить это, что сказать @DavidWasser? –